我有一个Activity通过调用startActivity()
来调用另一个,在调用onSaveInstanceState(Bundle outState)
一段时间后我设置了一个布尔值valeu以在onCreate(Bundle savedInstanceState)
上恢复,但是当调用此方法时savedInstanceState
为空。我在互联网上搜索了一个答案,但没有为我的案例找到任何答案。
以下是onSaveInstanceState
方法:
@Override
protected void onSaveInstanceState(Bundle outState) {
outState = new Bundle();
outState.putBoolean(Constants.MAIN_ACTIVITY_STATE_RECREATED, true);
super.onSaveInstanceState(outState);
}
onCreate
:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setTitle(R.string.activity_main);
if (savedInstanceState!=null && savedInstanceState.getBoolean(Constants.MAIN_ACTIVITY_STATE_RECREATED, false)){
return;
}
//DO SOME STUFF
}
这是我的AndroidManifest活动宣言:
<activity android:name=".MainActivity"
android:screenOrientation="portrait"
android:configChanges="orientation|keyboardHidden">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
这叫做活动:
<activity android:name=".PhotoUserActivity"
android:screenOrientation="portrait"
android:configChanges="orientation|keyboardHidden"
android:parentActivityName=".MainActivity">
</activity>
如果我从第二个活动的声明中删除parentActivityName并自己制作“后退按钮”,则永远不会调用第一个Activity的onCreate。
感谢您的帮助!
答案 0 :(得分:2)
您无需初始化outState
变量,否则您将无法传递该值。
@Override
protected void onSaveInstanceState(Bundle outState) {
//outState = new Bundle(); <-- Remove this
super.onSaveInstanceState(outState);
outState.putBoolean(Constants.MAIN_ACTIVITY_STATE_RECREATED, true);
}
outState Bundle
由框架提供,通过初始化它,例如new Bundle()
如果它包含任何值Bundle
,您可能会删除之前的super.onSaveInstanceState(Bundle outState)
。
始终建议在添加新值之前先调用try:
connection.execute(my_table.insert(), records)
except DatabaseError as e:
connection.execute(my_table.insert(), records)
。
答案 1 :(得分:1)
如果您将应用程序的状态保存在一个包中(通常是onSaveInstanceState
中的非持久性动态数据),如果需要重新创建活动,则可以将其传递回onCreate
(例如,方向改变)这样你就不会丢失这些先前的信息。如果未提供任何数据,则savedInstanceState
为空。
...你 应该使用onPause()方法来编写任何持久数据(例如 用户编辑)到存储。另外,该方法 在放置活动之前调用onSaveInstanceState(Bundle) 这样的背景状态,可以让你省去任何动态 实例状态在您的活动中进入给定的Bundle,稍后 如果需要重新创建活动,则在onCreate(Bundle)中收到。 有关如何使用的更多信息,请参阅“进程生命周期”部分 流程的生命周期与其托管的活动相关联。注意 将持久数据保存在onPause()而不是 onSaveInstanceState(Bundle)因为后者不属于 生命周期回调,因此不会在每种情况下调用 在其文档中描述。