如何使用保存实例状态保存活动状态?

我一直在安卓SDK平台上工作,现在还不清楚如何保存应用程序的状态。因此,考虑到“Hello,Android”示例的这一小部分重新加工:

包com.android.hello;
导入android.app.Activity;
导入android.os.Bundle;
导入android.widget.TextView;
公共类HelloAndroid扩展活动{
私有文本视图mTextView=null;
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
mTextView=新文本视图(此);
如果(savedInstanceState==null){
mTextView.setText(“欢迎使用HelloAndroid!”);
}否则{
mTextView.setText(“欢迎回来”);
}
setContentView(mTextView);
}
}

我认为这对于最简单的情况来说就足够了,但不管我如何离开应用程序,它总是以第一条消息响应

我确信解决方案很简单,只需重写onPauseonPause或类似的内容,但我已经在文档中翻了30分钟左右,没有发现任何明显的问题

您需要重写onSaveInstanceState(Bundle savedInstanceState)并将要更改的应用程序状态值写入Bundle参数,如下所示:

@覆盖
SaveInstanceState上的公共无效(Bundle savedInstanceState){
super.onSaveInstanceState(savedInstanceState);
//将UI状态更改保存到savedInstanceState。
//如果进程被激活,则此捆绑包将传递给onCreate
//杀死并重新启动。
savedInstanceState.putBoolean(“MyBoolean”,true);
savedInstanceState.putDouble(“myDouble”,1.9);
savedInstanceState.putInt(“MyInt”,1);
putString(“MyString”,“欢迎回到Android”);
//等等。
}

捆绑包本质上是一种存储NVP(“名称-值对”)映射的方法,它将被传递到onCreate()onRestoreInstanceState()中,然后从活动中提取值,如下所示:

@覆盖
RestoreInstanceState上的公共无效(Bundle savedInstanceState){
super.onRestoreInstanceState(savedInstanceState);
//从savedInstanceState还原UI状态。
//此捆绑包也已传递给onCreate。
boolean myBoolean=savedInstanceState.getBoolean(“myBoolean”);
double myDouble=savedInstanceState.getDouble(“myDouble”);
int myInt=savedInstanceState.getInt(“myInt”);
String myString=savedInstanceState.getString(“myString”);
}

或者从一个碎片

@覆盖
ViewStateRestored上的公共无效(@Nullable Bundle savedinStateCState){
super.onViewStateRestored(savedInstanceState);
//从savedInstanceState还原UI状态。
//此捆绑包也已传递给onCreate。
boolean myBoolean=savedInstanceState.getBoolean(“myBoolean”);
double myDouble=savedInstanceState.getDouble(“myDouble”);
int myInt=savedInstanceState.getInt(“myInt”);
String myString=savedInstanceState.getString(“myString”);
}

您通常会使用此技术来存储应用程序的实例值(选择、未保存的文本等)

发表评论