1、当我们正在发短信的时候,已经写了几百字了,这时突然来了一个电话,我们接完电话之后,如果发现辛辛苦苦的几百字不见了,那可就火大了,而实际上这些 内容都是保存了的。在我们接电话的过程中,我们发信息的那个Activity是可能会被系统回收的,这时会调用Activity的 onSaveInstanceState回调方法,而我们就可以在这个方法中保存状态数据,在onCreate方法或者在2.0之后提供的回调方法 onRestoreInstanceState中进行状态数据恢复。
2、当我们在玩游戏的时候,可能又想听歌,然后我们会按home或者back键退出游戏去启动音乐,然后再回到游戏,当我们回到游戏的时候,发现刚刚的状 态还是被保存的。这种情况,我们可以这样保存状态。在onPause方法中保存状态数据,在onResume方法中进行状态恢复。
下面和大家分享一下,这两种情况保存状态的实现代码:
主Activity
package com.zyb.state;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.widget.EditText;
public class MainActivity extends Activity {
//内容输入框
private EditText content;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
content=(EditText)findViewById(R.id.content);
if(savedInstanceState!=null){
//得到保存的数据
String saveString=savedInstanceState.getString("content");
//恢复数据
content.setText(saveString);
}
}
/**
* 在该方法中保存状态数据
*/
@Override
protected void onPause() {
super.onPause();
//得到要保存的输入框的内容
String saveString=content.getText().toString();
SharedPreferences sp=this.getSharedPreferences("save", Context.MODE_PRIVATE);
//保存输入框的内容
sp.edit().putString("content", saveString).commit();
}
/**
* 在该方法中恢复状态数据
*/
@Override
protected void onResume() {
//得到保存的内容
String saveString=this.getSharedPreferences("save", Context.MODE_PRIVATE).getString("content", null);
//恢复内容
content.setText(saveString);
super.onResume();
}
/**
* 在该方法中保存状态数据
*/
@Override
protected void onSaveInstanceState(Bundle outState) {
//得到要保存的输入框的内容
String saveString=content.getText().toString();
//保存输入框的内容
outState.putString("content", saveString);
super.onSaveInstanceState(outState);
}
}
main.xml代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<EditText
android:id="@+id/content"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
程序运行之后我们在输入框中输入一些内容,然后按back或者home键退出,再次进入程序,上次输入的数据还是保存的。