-->

当onRestoreInstanceState叫什么名字?(when is onRestoreIns

2019-07-21 09:44发布

对不起,我不理解,但我在Android开发新的。

我有一个在它的活动A和活动B的应用程序,我从一个活动到活动B.当我离开活动A,该onSaveInstanceState方法被调用,但是当我在同一个回到活性A(从活动B应用程序),在该束onCreate方法为空。

我能做些什么,以节约活动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的代码,当我按下一个按钮,返回到活动答:

public void onBack(View view)
{
    NavUtils.navigateUpFromSameTask(this);
}

Answer 1:

保存和恢复状态是为了保存当前的临时数据,当用户退出应用程序,它已经过时了。 当最小化或打开下一个可能被系统杀死由于缺乏资源,并与重新启动退出活动savedInstanceState当你回去吧。 因此,使用onSaveInstanceState()只保存最小化,恢复会话数据。

所以,如果你在开始前一个新的活动,并回到前一个(你正在尝试做的),活性的可能不会被杀死(只是停止),并没有去被破坏重新启动。 您可以强制杀死它,并通过检查恢复Don't keep activities在开发者选项菜单。

如果你调用finish()或删除Activity从最近的任务列表中savedInstanceState不会被传递到onCreate()由于任务被清除。

如果该值必须是持久的考虑使用SharedPreferences.



Answer 2:

要回答你的问题,看看Android的文档: https://developer.android.com/reference/android/app/Activity.html#onRestoreInstanceState(android.os.Bundle)

它说,onRestoreInstanceState之后在活动周期在onStart()方法调用。



Answer 3:

这是因为你在导航艰辛的道路。 如果您使用的手机的默认后退按钮导航,您onCreate会得到传入的包。

为了规避这个问题,我建议你你的状态保存到共享偏好,以及作为备份。 当束为空,从共享偏好恢复。



Answer 4:

后在onStart(),它是的onCreate()之后



Answer 5:

我在这种情况下使用的标志和SharedPreferences。 这应该工作,当您更改屏幕方向。



文章来源: when is onRestoreInstanceState called?