哪里可以使用onSaveInstanceState,其中参数传递的是不同的Activity?

Swi*_*ift 7 android activity-lifecycle android-activity

对于Acitivity,已经存在一个名为onSaveInstacestate(Bundle)的方法,该方法用于存储被覆盖方法的活动数据.

正如我所看到的,有两个不同的onSaveInstanceState,其中参数的传递方式如下所示.

@Override
    public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState)
    {
        super.onSaveInstanceState(outState, outPersistentState);
        Log.i("test", "onSaveInstanceState called **********");
    }
Run Code Online (Sandbox Code Playgroud)

@Override
    protected void onSaveInstanceState(Bundle outState)
    {
         super.onSaveInstanceState(outState);
          Log.i("test", "onSaveInstanceState with bundle only called");
    }
Run Code Online (Sandbox Code Playgroud)

那么,在什么情况下这两种方法都可以使用?请详细说明.提前致谢.

aha*_*aha 10

这值得一个扩展的答案。如公认的答案所述,由于API级别21的存在一个额外的重载onSaveInstanteState

自API级别1(Docs)起可用:

void onSaveInstanceState (Bundle outState)

API级别21(Docs)引入的附加功能:

void onSaveInstanceState (Bundle outState, PersistableBundle outPersistentState)

带有的后者PersistableBundle不能替代前者。仅在Activity属性R.attr.persistableMode设置为as时使用persistAcrossReboots。当这样的Activity持久化onSaveInstanceState (Bundle outState, PersistableBundle outPersistentState)将被调用时,您会收到一个PersistableBundle存储实例状态的信息。

要恢复的状态ActivityR.attr.persistableMode设定为persistAcrossReboots,有

void onRestoreInstanceState (Bundle savedInstanceState, PersistableBundle persistentState)

请注意,onRestoreInstanceState (Bundle savedInstanceState)如果调用了,则不会PersistableBundle调用。我假设的情况也是如此onSaveInstanceState,但我尚未检查它,并且在API级别28时文档未提及它。

还有一个适当的重载onCreate()


onk*_*kar 6

从API Level 21开始,onSaveInstanceState()有一个名为take的对象的新参数PersistableBundle.您可以在Docs上阅读有关PersistableBundle的更多信息

简而言之,

适用于API 21及更高版本

@Override
    public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState)
    {
        super.onSaveInstanceState(outState, outPersistentState);
        Log.i("test", "onSaveInstanceState called **********");
    }
Run Code Online (Sandbox Code Playgroud)

对于API小于20

@Override
    protected void onSaveInstanceState(Bundle outState)
    {
         super.onSaveInstanceState(outState);
          Log.i("test", "onSaveInstanceState with bundle only called");
    }
Run Code Online (Sandbox Code Playgroud)