对于Acitivity,已经有一个名为onSaveInstacestate(Bundle)的方法,用于存储被覆盖方法的活动数据。
如我所见,有两个不同的onSaveInstanceState,其中参数的传递方式如下所示。
@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState)
{
super.onSaveInstanceState(outState, outPersistentState);
Log.i("test", "onSaveInstanceState called **********");
}
和
@Override
protected void onSaveInstanceState(Bundle outState)
{
super.onSaveInstanceState(outState);
Log.i("test", "onSaveInstanceState with bundle only called");
}
那么,在什么情况下这两种方法都可以使用? 请详细说明。 提前谢谢。
答案 0 :(得分:6)
从API级别21开始,onSaveInstanceState()
有一个名为PersistableBundle
的对象的新参数。您可以在Docs
简而言之,
对于API 21及以上
@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState)
{
super.onSaveInstanceState(outState, outPersistentState);
Log.i("test", "onSaveInstanceState called **********");
}
对于少于20的API
@Override
protected void onSaveInstanceState(Bundle outState)
{
super.onSaveInstanceState(outState);
Log.i("test", "onSaveInstanceState with bundle only called");
}
答案 1 :(得分:3)
这值得扩展。正如公认的答案所述,由于API级别21,onSaveInstanteState
还有一个额外的重载。
从API级别1(Docs)开始可用:
void onSaveInstanceState (Bundle outState)
API级别21(Docs)引入的附加功能:
void onSaveInstanceState (Bundle outState, PersistableBundle outPersistentState)
带有PersistableBundle
的后一个不能代替前一个。仅在Activity
属性R.attr.persistableMode
设置为persistAcrossReboots
时使用。当这样的Activity
要保留时,onSaveInstanceState (Bundle outState, PersistableBundle outPersistentState)
将被调用,并且您会收到一个PersistableBundle
来存储实例状态。
要恢复R.attr.persistableMode
设置为Activity
的{{1}}的状态,有
persistAcrossReboots
请注意,如果调用了void onRestoreInstanceState (Bundle savedInstanceState, PersistableBundle persistentState)
的对象,则不会调用onRestoreInstanceState (Bundle savedInstanceState)
。我假设PersistableBundle
的情况也是如此,但是我没有检查它,并且在API级别28时文档也没有提及它。
onCreate()
也有适当的重载。
答案 2 :(得分:0)
我只能说些什么,但这是一些帮助您的帮助代码 我在基本活动中执行此操作,以确保始终保存我的数据
public abstract void saveInstanceState(Bundle outState, PersistableBundle outPersistentState);
@Override
public final void onSaveInstanceState(@NonNull Bundle outState, PersistableBundle outPersistentState) {
saveInstanceState(outState, outPersistentState);
super.onSaveInstanceState(outState, outPersistentState);
}
@Override
protected final void onSaveInstanceState(@NonNull Bundle outState) {
saveInstanceState(outState, null);
super.onSaveInstanceState(outState);
}
我使用的是final关键字,所以我不会忘记并覆盖其中一种方法 而不是我的自定义摘要