什么时候onRestoreInstanceState调用?

Tün*_*nde 38 android android-lifecycle onrestoreinstancestate onsaveinstancestate

对不起我的不解,但我是android开发的新手.

我有一个活动A和活动B的应用程序,我从活动A转到活动B.当我离开活动A时,onSaveInstanceState方法被调用,但是当我回到活动A时(来自活动B在同一个应用程序中) ),onCreate方法中的bundle 为null.

我该怎么办,以保存活动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);
}
Run Code Online (Sandbox Code Playgroud)

这是我的活动B的代码,当我按下按钮返回活动A:

public void onBack(View view)
{
    NavUtils.navigateUpFromSameTask(this);
}
Run Code Online (Sandbox Code Playgroud)

Sim*_*mon 49

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

它表示onRestoreInstanceState在活动生命周期中的onStart()方法之后调用.

  • 感谢您回答标题中提出的问题=) (20认同)

Yar*_*lyk 24

保存和恢复状态用于保存用户退出应用程序时过时的当前临时数据.当您通过打开下一个最小化或离开活动时,由于缺少资源可能会被系统杀死,并savedInstanceState在您返回时重新启动.因此,onSaveInstanceState()仅用于保存最小化还原会话数据.

因此,如果您在前面启动一个新的Activity并返回到前一个(您正在尝试做的事情),则可能不会杀死(刚刚停止)并重新启动活动A而不会被销毁.您可以通过签Don't keep activities入开发人员选项菜单强制终止它并恢复.

如果您调用finish()或删除Activity最近的任务列表,savedInstanceStateonCreate()自该任务被清除后将不会传递.

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