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存储实例状态的信息。
要恢复的状态Activity与R.attr.persistableMode设定为persistAcrossReboots,有
void onRestoreInstanceState (Bundle savedInstanceState, PersistableBundle persistentState)
请注意,onRestoreInstanceState (Bundle savedInstanceState)如果调用了,则不会PersistableBundle调用。我假设的情况也是如此onSaveInstanceState,但我尚未检查它,并且在API级别28时文档未提及它。
还有一个适当的重载onCreate()。
从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)