我试图通过以下示例保存我的activty的onSaveInstanceState(Bundle)方法中的一些值:Saving Android Activity state using Save Instance State
但它似乎无法从Oncreate()加载它。 bundle对象总是为null但是每当我调用另一个activity时,它确实会进入onSaveInstanceState方法来保存我的值。
现在我读到了我刚刚发布的那个问题,并且有人注意到他们无法让它在模拟器中运行?不幸的是,我正在努力。在模拟器上并且无法在设备上测试应用程序,因为我现在没有可用的设备而且我正在与之交互的Web服务位于我的工作机器上的本地VM中,此时无法远程访问。
我的问题是,保存的捆绑包不适用于模拟器吗?我还注意到,当我解除或启动一项新活动时,活动会在暂停时调用,然后在onStop上调用。当我带回同样的活动时,它会直接进入创造?
现在根据这里的文档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 :(得分:2)
bundle对象总是为null但是每当我解除激活时它确实会进入onSaveInstanceState方法来保存我的值。
如果“解雇”是指“按下BACK按钮”,则Bundle
onSaveInstanceState()
(如果有)被丢弃,因为用户已表明他们已完成活动。 onSaveInstanceState()
Bundle
用于用户尚未表示已完成活动的情况(例如,他们接受了来电)但Android选择销毁该活动以释放RAM。 / p>
我的问题是,保存的捆绑包不适用于模拟器吗?
onSaveInstanceState()
在模拟器中完美运行。在模拟器中测试onSaveInstanceState()
的最简单方法是更改屏幕方向([Ctrl] - [F11])。
我还注意到,当我关闭或启动新活动时,活动会在暂停时调用,然后在onStop上调用。当我带回同样的活动时,它会直接进入创造?
您对Android有一些基本的误解,远远超出单个StackOverflow答案的范围。
但是如果你在onStop()部分下面的那个图上面读到它说下一步它是onRestart()还是onDestroy()?没有提到onCreate?在文档上输入?
图表通常是正确的。在某些情况下,onDestroy()
未被调用(例如,紧急RAM回收强制您的进程被杀死),但这种情况并不常见。