我有一个活动A,它调用活动B。在活动B中,当我单击一个按钮时,将调用finish(),它又调用活动B的onDestroy()并返回到活动A。
根据安卓文档,在调用onDestroy之前,将调用onSaveInstanceState(Bundle bundle),我将在其中执行以下操作。
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
System.out.println("Saving webview state");
Log.d(TAG, "In onsave");
wv.saveState(outState);
}并且下一次从活动A开始活动B时,
在oncreate()中,我执行以下操作:
onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
if(savedInstanceState != null){
//restore webview
}else {
// code
}
}但是,在活动B中调用onDestroy之前,从不调用onSaveInstanceState方法。在这方面的任何帮助都将非常感谢。
编辑:如果这是不可能的。如果有存储webview状态的方法,请告诉我
发布于 2012-10-09 13:33:48
请注意,在重新创建活动时会调用onRestoreInstanceState(),但仅在以下情况下才会调用:
它被OS杀死了。“这种情况在以下情况下发生:
设备的
onRestoreInstanceState()。“所以,如果你在你的活动中,你点击了设备上的Back按钮,你的活动就是finish()ed,下次你启动你的应用程序时,它会再次启动(听起来像是重新创建的,不是吗?)但这次没有保存状态,因为您在单击Back按钮时故意退出了它。
发布于 2015-11-19 19:01:54
我也遇到过类似的情况。这显然是一个开发错误。我重写了错误的方法:
public void onSaveInstanceState(Bundle outState,
PersistableBundle outPersistentState)取而代之的是正确的:
protected void onSaveInstanceState(Bundle outState)发布于 2012-10-09 13:04:13
请参阅此处的文档:http://developer.android.com/reference/android/app/Activity.html
请注意,将持久化数据保存在
onPause()中而不是onSaveInstanceState(Bundle)中很重要,因为后者不是生命周期回调的一部分,因此不会像文档中描述的那样在每种情况下都被调用。
onSaveInstanceState方法的文档中写道,
不要将此方法与活动生命周期回调(如
onPause())或onStop()(在销毁之前调用)混淆,活动生命周期回调总是在活动被置于后台或销毁过程中调用。调用onPause()和onStop()而不调用此方法的一个示例是,当用户从活动B导航回活动A时:不需要在B上调用onSaveInstanceState(Bundle),因为该特定实例永远不会被还原,因此系统会避免调用它。一个调用onPause()而不是onSaveInstanceState(Bundle)的例子是,当activity B在activity A之前启动时:如果activity A在activity A的生命周期内没有被终止,系统可能会避免调用activity A的onSaveInstanceState(Bundle),因为A的用户界面状态将保持不变。
试试这个:
@Override
public void onPause(){
System.out.println("Saving webview state");
Log.d(TAG, "In onsave");
wv.saveState(outState);
super.onPause();
}
and
@Override
public void onResume(){
//restore webview
}我不确定if语句的目的是什么,但尝试一下,看看会发生什么。
https://stackoverflow.com/questions/12793069
复制相似问题