内容来自 DOC https://q.houxu6.top/?s=如何使用saveInstanceState保存活动状态?
我已经在Android SDK平台上工作了一段时间,但是不太清楚如何保存应用程序的状态。因此,针对这个“Hello, Android”示例进行了一些微小的调整:
package com.android.hello;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class HelloAndroid extends Activity {
private TextView mTextView = null;
/\*\* Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mTextView = new TextView(this);
if (savedInstanceState == null) {
mTextView.setText("Welcome to HelloAndroid!");
} else {
mTextView.setText("Welcome back.");
}
setContentView(mTextView);
}
}
我认为对于最简单的情况来说,这已经足够了,但是它总是响应第一条消息,无论我如何离开应用程序。
我确信解决方案非常简单,就像覆盖onPause
方法或者类似的东西,但是我在文档中查找了大约30分钟,并没有发现任何明显的东西。
你需要重写onSaveInstanceState(Bundle savedInstanceState)
方法,并将你想要更改的应用程序状态值写入Bundle
参数,像这样:
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
// 将UI状态更改保存到savedInstanceState中。
// 如果进程被杀死并重新启动,此bundle将被传递给onCreate。
savedInstanceState.putBoolean("MyBoolean", true);
savedInstanceState.putDouble("myDouble", 1.9);
savedInstanceState.putInt("MyInt", 1);
savedInstanceState.putString("MyString", "Welcome back to Android");
// 等等。
}
Bundle本质上是一种存储NVP(“名称-值对”)映射的方式,它将传递到onCreate()
和onRestoreInstanceState()
,然后你可以从活动中像这样提取值:
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
// 从savedInstanceState中恢复UI状态。
// 此bundle也已传递给onCreate。
boolean myBoolean = savedInstanceState.getBoolean("MyBoolean");
double myDouble = savedInstanceState.getDouble("myDouble");
int myInt = savedInstanceState.getInt("MyInt");
String myString = savedInstanceState.getString("MyString");
}
或者从片段中。
@Override
public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
super.onViewStateRestored(savedInstanceState);
// 从savedInstanceState中恢复UI状态。
// 此bundle也已传递给onCreate。
boolean myBoolean = savedInstanceState.getBoolean("MyBoolean");
double myDouble = savedInstanceState.getDouble("myDouble");
int myInt = savedInstanceState.getInt("MyInt");
String myString = savedInstanceState.getString("MyString");
}
你通常会使用这种技术来存储应用程序的实例值(选择、未保存的文本等)。
标签:mTextView,myDouble,保存,Bundle,savedInstanceState,活动状态,saveInstanceState,onCreate, From: https://www.cnblogs.com/xiaomandujia/p/17801109.html