对不起我的不理解,但我是android开发的新手。
我有一个活动A和活动B的应用程序,我从活动A转到活动B.当我离开活动A时,调用了onSaveInstanceState
方法,但是当我回到活动A时(来自同一应用程序中的活动B),onCreate
方法中的包为空。
我可以做些什么来保存活动A以前的状态?我只想存储应用程序生命周期的数据。
有人可以帮我这个吗?
以下是我的活动A代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState != null)
{
Log.v("Main", savedInstanceState.getString("test"));
}
else
{
Log.v("Main", "old instance");
}
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState)
{
Log.v("Main", "save instance");
savedInstanceState.putString("test", "my test string");
super.onSaveInstanceState(savedInstanceState);
}
public void buttonClick(View view)
{
Intent intent = new Intent(this, Activity2.class);
startActivity(intent);
}
这是我的活动B的代码,当我按下按钮返回活动A:
public void onBack(View view)
{
NavUtils.navigateUpFromSameTask(this);
}
答案 0 :(得分:44)
要回答您的问题,请查看android doc:https://developer.android.com/reference/android/app/Activity.html#onRestoreInstanceState(android.os.Bundle)
它表示onRestoreInstanceState是在活动生命周期中的onStart()方法之后调用的。
答案 1 :(得分:24)
保存和恢复状态旨在保存用户退出应用程序时过时的当前临时数据。
当您通过打开下一个最小化或离开活动时,由于缺少资源可能会被系统杀死,并在您返回时使用savedInstanceState
重新启动。因此,仅使用onSaveInstanceState()
来保存最小化还原会话数据。
因此,如果你在前面开始一个新的Activity并返回到前一个(你想要做的事情),那么活动A可能不会被杀死(只是停止)并重新启动而不会被破坏。您可以通过选中开发人员选项菜单中的Don't keep activities
来强行终止并恢复。
如果您致电finish()
或从最近的任务列表中删除Activity
,则savedInstanceState
将不会传递给onCreate()
,因为任务已清除。
如果值必须持久,请考虑使用SharedPreferences.
答案 2 :(得分:3)
这是因为你正在艰难地进行导航。如果您使用手机的默认后退按钮导航,则onCreate
会传输捆绑包。
为避免此问题,我建议您将状态保存为共享首选项以及备份。当bundle为null时,从共享首选项中恢复它。
答案 3 :(得分:2)
onStart()之后的onStart()
答案 4 :(得分:1)
onSaveInstanceState
... onPause()-> onSaveInstanceState() -> onStop() -> onDestory()
onRestoreInstanceState
onCreate()-> onStart()-> onRestoreInstanceState()-> onPostCreate(Bundle) ...
或者您可以使用LiveData
。在其中保存状态并观察。如果设备旋转,则会相应地更新视图。
答案 5 :(得分:0)
我在这种情况下使用了一个标志和SharedPreferences。这应该有效,并且当您更改屏幕方向时。