Я пытаюсь сохранить некоторые значения в методе 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();
}
}
объект пакета всегда равен нулю, но всякий раз, когда я увольняю активность, он действительно переходит в метод onSaveInstanceState для сохранения моих значений.
Если при "увольнении" вы имеете в виду "нажмите кнопку" НАЗАД "), то Bundle
из onSaveInstanceState()
(если таковой имеется) будет отброшен, так как пользователь указал, что они закончили с активностью. onSaveInstanceState()
Bundle
используется в тех случаях, когда пользователь не сказал, что они закончили с активностью (например, они приняли входящий телефонный звонок), но Android решил уничтожить действие, чтобы освободить оперативную память.
Мой вопрос: верно ли, что сохраненные пакеты не работают на эмуляторах?
onSaveInstanceState()
отлично работает в эмуляторе. Простейшим способом тестирования onSaveInstanceState()
в эмуляторе было бы изменить ориентацию экрана ([Ctrl] - [F11]).
Я также заметил, что, когда я увольняю или воспитываю новое действие, действие вызывает onPause, а затем onStop. когда я возвращаю ту же самую активность, она идет прямо в onCreate?
У вас есть некоторые фундаментальные недоразумения в отношении Android, что выходит за рамки одного ответа StackOverflow.
но если вы прочтете ниже эту диаграмму в разделе onStop(), то говорится, что следующий шаг, на который он идет, - это onRestart() или onDestroy()? не упоминается onCreate? Введите в документы?
Диаграмма, как правило, правильная. Существуют сценарии, в которых onDestroy()
не вызывается (например, аварийное восстановление ОЗУ, заставляющее ваш процесс быть убитым), но это необычно.