2010-11-17 3 views
1

Я пытаюсь сохранить некоторые значения в методе onSaveInstanceState (Bundle) моего activty следуя примеру здесь: Saving Android Activity state using Save Instance StateAndroid обыкновение сохранять текущее состояние деятельности

Но это не кажется, чтобы загрузить его из OnCreate(). объект bundle всегда имеет значение null, но всякий раз, когда я вызываю другое действие, он действительно переходит в метод 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); 
} 

Мои 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(); 
     } 




    } 
+0

Привет, Могли ли вы решить эту проблему. Я столкнулся с этим на телефонном телефоне Motorola (эмулятор и несколько других телефонов, которые я пытался, похоже, не имеют этой проблемы с сохранением экземпляра InstanceState, но не восстановлены) –

ответ

2

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

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

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

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

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

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

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

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

+0

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

Смежные вопросы