繁体   English   中英

什么时候调用 onRestoreInstanceState?

[英]when is onRestoreInstanceState called?

抱歉我的不理解,但我是 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);
}

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

它说 onRestoreInstanceState 在活动生命周期中的 onStart() 方法之后被调用。

保存和恢复状态旨在保存当用户退出应用程序时已过时的当前临时数据。 当您通过打开下一个活动来最小化或离开活动时,它可能会因资源不足而被系统杀死,并在您返回时使用savedInstanceState重新启动。 所以使用onSaveInstanceState()仅用于保存最小化恢复会话数据。

因此,如果您在前面启动一个新 Activity 并返回到前一个(您正在尝试执行的操作),则 Activity A 可能不会被杀死(只是停止)并重新启动而不会被销毁。 您可以通过选中Don't keep activities在开发人员选项菜单中Don't keep activities来强制杀死它并恢复。

如果您调用finish()或从最近的任务列表中删除Activity ,则savedInstanceState将不会传递给onCreate()因为任务已被清除。

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

发生这种情况是因为您正在艰难地航行。 如果您使用手机的默认后退按钮导航,您的onCreate将获得传入的包。

为了规避这个问题,我建议您将状态保存到共享首选项以及备份。 当包为空时,从共享首选项中恢复它。

在 onStart() 之后,在 onCreate() 之后

参考

保存实例状态

... onPause()-> onSaveInstanceState() -> onStop() -> onDestory()

onRestoreInstanceState

onCreate()-> onStart()-> onRestoreInstanceState()-> onPostCreate(Bundle) ...

或者您可以使用LiveData 保存其中的状态并观察。如果设备旋转,它将相应地更新视图。

在这种情况下,我使用了一个标志和 SharedPreferences。 这应该有效,并且当您更改屏幕方向时。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM