您的位置:首页 > 其它

activity状态保存讲解三

2015-02-18 14:06 162 查看
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键退出,再次进入程序,上次输入的数据还是保存的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: