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

1

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

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

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

Мой вопрос: правда ли, что сохраненные пакеты не работают на эмуляторах? Я также заметил, что, когда я увольняю или воспитываю новое действие, действие вызывает onPause, а затем onStop. когда я возвращаю ту же самую активность, она идет прямо в onCreate?

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

В любом случае, это мои 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);
}

My 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 ответ

2

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

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

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

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

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

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

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

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

  • 0
    Я не совсем понимаю андроид, но я только ссылаюсь на документы и, возможно, потенциальную проблему, почему пакет не загружен или сохранен правильно. Когда я имею в виду «уволен», я имею в виду, когда запускается другая деятельность. Я исправлю свой пост, чтобы отразить это.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню