Android не сохранит текущее состояние активности

Я пытаюсь сохранить некоторые значения в методе onSaveInstanceState(Bundle) моей активности, следуя приведенному ниже примеру: Сохранение состояния активности Android с помощью Сохранить состояние экземпляра

Но, похоже, он не загружается из Oncreate(). объект bundle всегда нулевой, но всякий раз, когда я вызываю другое действие, он действительно входит в метод onSaveInstanceState, чтобы сохранить мои значения.

Теперь я прочитал тот вопрос, который я только что опубликовал, и кто-то заметил, как они не могли заставить его работать в эмуляторе? к сожалению, это все, над чем я работаю. На эмуляторе и не могу протестировать приложение на устройстве, так как у меня сейчас нет доступного мне устройства. А веб-службы, с которыми я взаимодействую, находятся в локальной виртуальной машине на моей рабочей машине, к которой в данный момент нет удаленного доступа.

У меня вопрос, правда ли, что сохраненные пакеты не работают на эмуляторах? Я также заметил, что когда я закрываю или поднимаю новое действие, оно вызывает OnPause, а затем OnStop. когда я возвращаю ту же самую активность, она сразу переходит на OnCreate?

теперь в соответствии с документами здесь http://developer.android.com/guide/topics/fundamentals.html Это правильно с точки зрения того, что показывает диаграмма жизненного цикла, но если вы читаете ниже этой диаграммы в разделе onStop(), то это говорит, что следующим шагом является onRestart() или onDestroy()? нет упоминания о создании? Типа на документы?

В любом случае, вот мои onSaveInstanceState() и onCreate() в одном и том же упражнении:

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    Log.d(TAG, "SAVING OauthManager in onSaveInstanceState");
    // TODO: if works, we need to save the my network list HashMap as well
    // so we dont make a call to the platform everytime we refresh this
    // screen
    // savedInstanceState.putSerializable("oauthManager", mOathManager);
    // Log.d(TAG, "finished saving");
    // super.onSaveInstanceState(savedInstanceState);
    // Log.d(TAG, "super.onSaveInstanceState(savedInstanceState)");

    savedInstanceState.putString(USER_CONSUMER_ID,
            mSavedUserConsumerTokenId);
    savedInstanceState.putString(USER_CONSUMER_SECRET,
            mSavedUserConsumerSecret);

    savedInstanceState.putString(URL_REQUEST_TOKEN, mSavedRequestTokenUrl);
    savedInstanceState.putString(URL_ACCESS_TOKEN, mSavedAccessTokenUrl);
    savedInstanceState.putString(URL_AUTHORIZE_TOKEN,
            mSavedAuthorizeTokenUrl);
    super.onSaveInstanceState(savedInstanceState);
}

Мой onCreate

@Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        Log.d(TAG, "    ");
        Log.d(TAG, "onCreate");
        Log.d(TAG, "///////////////////////////////////////");
        Log.d(TAG, "///////////////////////////////////////");
        super.onCreate(savedInstanceState);
        Log.d(TAG, "super.onCreate(savedInstanceState);");
        setContentView(R.layout.network_list);
        mContext = getApplicationContext();
        mIntent = getIntent();


        mGoogleButton = (Button) findViewById(R.id.googleAddOrRemoveButton);
        mFacebookButton = (Button) findViewById(R.id.facebookAddOrRemoveButton);
        mLinkedInkButton = (Button) findViewById(R.id.linkedInAddOrRemoveButton);
        mPopEmailButton = (Button) findViewById(R.id.popEmailAddOrRemoveButton);


        if (savedInstanceState != null) {
            Log.d(TAG, "inside if (savedInstanceState != null) {");
            Log.d(TAG, "savedInstanceState != null");
            // mOathManager = (OAuthManager) savedInstanceState
            // .getSerializable("oauthManager");
            mSavedUserConsumerTokenId = savedInstanceState
                    .getString(USER_CONSUMER_ID);
            mSavedUserConsumerSecret = savedInstanceState
                    .getString(USER_CONSUMER_SECRET);

            mSavedRequestTokenUrl = savedInstanceState
                    .getString(URL_REQUEST_TOKEN);
            mSavedAccessTokenUrl = savedInstanceState
                    .getString(URL_ACCESS_TOKEN);
            mSavedAuthorizeTokenUrl = savedInstanceState
                    .getString(URL_AUTHORIZE_TOKEN);

            mOathManager = new OAuthManager(mContext, getIntent(),
                    mSavedUserConsumerTokenId, mSavedUserConsumerSecret,
                    mSavedRequestTokenUrl, mSavedAccessTokenUrl,
                    mSavedAuthorizeTokenUrl, CALLBACK_URI);

            mOathManager.requestUserRequestToken();
        } else{

            Log.d(TAG, "savedInstanceState is null and loading the list again");
            GetNetworkListTask getNetworkListTask = new GetNetworkListTask();
            getNetworkListTask.execute();
        }




    }

1 ответ

объект bundle всегда нулевой, но всякий раз, когда я отклоняю активность, он действительно входит в метод onSaveInstanceState, чтобы сохранить мои значения.

Если под "отклонить" вы подразумеваете "нажать кнопку НАЗАД", то Bundle от onSaveInstanceState() (если таковые имеются) отбрасывается, так как пользователь указал, что они закончили с действием. onSaveInstanceState()Bundle используется в тех случаях, когда пользователь еще не сказал, что завершил действие (например, принял входящий телефонный звонок), а Android решает уничтожить действие, чтобы освободить ОЗУ.

У меня вопрос, правда ли, что сохраненные пакеты не работают на эмуляторах?

onSaveInstanceState() прекрасно работает в эмуляторе. Самый простой способ проверить onSaveInstanceState() в эмуляторе можно было бы изменить ориентацию экрана ([Ctrl]-[F11]).

Я также заметил, что когда я закрываю или поднимаю новое действие, оно вызывает OnPause, а затем OnStop. когда я возвращаю ту же самую активность, она сразу переходит на OnCreate?

У вас есть некоторые фундаментальные недоразумения относительно Android, выходящие далеко за рамки одного ответа Stackru.

но если вы прочтете эту диаграмму в разделе onStop(), то там будет сказано, что следующим шагом является onRestart() или onDestroy()? нет упоминания о создании? Типа на документы?

Диаграмма в целом правильная. Есть сценарии, в которых onDestroy() не вызывается (например, экстренное восстановление ОЗУ, вынуждающее ваш процесс быть убитым), но это редко.

Другие вопросы по тегам