onCreate(Bundle savedInstanceState) in always null

Almer picture Almer · Mar 28, 2013 · Viewed 20.2k times · Source

I know, this question is asked before on stackoverflow, but non of the answers worked for me.

Probably worth mentioning:

  • I use ActionBarSherlock with the support package.
  • Method onSaveInstanceState IS called when I press the home button. The method onCreate just always gives NULL for the Bundle savedInstanceState.
  • Method onRestoreInstanceState is never called at all. (I wouldn't mind if the onCreate worked ;)).
  • Also (it shouldn't matter) I tried putting super.onSaveInstanceState(outState) at the bottom of onSaveInstanceState. No luck either.

Here's the code. I hope someone had this problem and solved it.

public class MainActivity extends SherlockFragmentActivity {

    private static final String LOG_TAG = MainActivity.class.getSimpleName();

    private static String STATE_TO_STORE = "state_to_store";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);        

        Log.d(LOG_TAG, "onCreate: savedInstanceState = " + (savedInstanceState == null ? "NULL" : "Not NULL"));

        // ... more code...
    }

    @Override
    public void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);

        Log.d(LOG_TAG, "onRestoreInstanceState: savedInstanceState = " + (savedInstanceState == null ? "NULL" : "Not NULL"));
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);

        outState.putInt(STATE_TO_STORE, 5); // store some int

        Log.d(LOG_TAG, "onSaveInstanceState bundle: " + outState.toString());
    }

    // ... more code ...

}

The logging clearly states onSaveInstanceState is being called and onCreate gets savedInstanceState = NULL.

Answer

user2360033 picture user2360033 · May 7, 2013

Check that your manifest does not contain android:noHistory="true".

I spent hours looking for an answer and it was that simple.