本节学习Activity的状态保存与恢复。

先用样例開始:

布局文件主要是实现例如以下。大家自行编写

Activity逻辑代码:

public class FiveActivity extends Activity {

	private Button setButton;
private Button getButton;
private EditText editText; private float value;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_five); setButton = (Button)findViewById(R.id.button1);
getButton = (Button)findViewById(R.id.button2);
editText = (EditText)findViewById(R.id.editText1); setButton.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
value = 1.234f;
editText.setText("hello world");
}
}); getButton.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
String string = editText.getText().toString(); Toast.makeText(FiveActivity.this, string+" "+value, 0).show();
}
});
} @Override
protected void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
Log.i("FiveActivity", "onSaveInstanceState");
super.onSaveInstanceState(outState);
} }

第一种情况:  

按setbutton,而且按getbutton

当然了,这时候按backbutton,当再次进入后,会发现输入框里没有内容。同一时候按get得到为0.0

同一时候第一种情况中我的打印Log.i("FiveActivity", "onSaveInstanceState");始终也是没有打印

接着另外一种情况:

当我们set后,再按get后。 这次不按Back键,这次按Home键:

当我们按Home键后。我们的Activity就处于stop状态。这时候我们的打印语句出现了

这时候我们手动杀死FiveActivity

这时候在启动Activity,当再次get时就会发现:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

EditText中的文字Hello World依然存在,而我的Value变量变为0.0了。

总结:

1: 对于第一种情况,Android系统认为是用户自愿的行为,认为那就没有保存的必要了。

2: 对于另外一种情况。EditText中的文字存在那是由于Android系统中差点儿对所以的UI都实现了OnSaveInstanceState方法。这是默认的实现。所以当我们Home出去时就会打印出现,至于我们的变量为啥没有恢复,非常明显那是由于没人保存它的值,这就得须要我们程序猿自己手动保存。

当我们在OnCreate方法中加入:

		if(savedInstanceState != null)
value = savedInstanceState.getFloat("1234");
	protected void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
Log.i("FiveActivity", "onSaveInstanceState");
outState.putFloat("1234", value);
super.onSaveInstanceState(outState);
}

这种话,当杀死进程后。再次进来我们的数据就会正常的出现。

同一时候。 除系统资源不足时,或者手机的屏幕方向变化时,改变语言时,都会导致Activity重现销毁,然后重现再创建。

这时候假设我们不保存须要保存的数据,也会出现不正确的情况。

Android 四大组件学习之Activity六的更多相关文章

  1. Android 四大组件学习之Service六

    上几节.我们学习怎样用StartServer启动一个服务,用bindServer去绑定一个服务.以及服务的生命周期,以及什么是IntentService. 也许有读者会发现,我们BindServer中 ...

  2. android四大组件学习总结以及各个组件示例(1)

    android四大组件分别为activity.service.content provider.broadcast receiver. 一.android四大组件详解 1.activity (1)一个 ...

  3. Android 四大组件学习之Server一

    上次学习了Android四大组件Activity之后,我们深刻理解了Activity.这次我们学习四大组件Service. Service与Activity的级别是一样的,都是Android系统不可缺 ...

  4. Android 四大组件学习之BroadcastReceiver一

    本节课学习四大组件最后一个, 广播接受者. 顾名思义广播接受者就是接受广播呗.比方在现实社会中,曾经每一个人家都有一台收音机,这可就能够去接受广播发出来的消息.大家都知道.程序世界也是參照的显示生活设 ...

  5. Android四大组件应用系列——Activity与Service交互实现APK下载

    Servic与Activity相比它没有界面,主要是在后台执行一些任务,Service有两种启动方法startService()和bindService(),startService方式Service ...

  6. Android 四大组件学习之BroadcastReceiver四

    本节学习系统中特殊的广播接收者. 我们前面几节不是说了,当广播接受者一旦注冊到系统中,当系统发送的广播和你注冊的广播的action匹配时,系统就会启动广播接收者所在的进程.除非用户手动停止广播接收者所 ...

  7. android四大组件学习总结以及各个组件示例(2)

    上篇博文讲解了activity.content provider,此篇博文来仔细总结service.broadcast receiver: 3. Service >什么是服务?>windo ...

  8. Android 四大组件学习之ContentProvider四

    上节我们学习了怎样去读取系统短信以及插入一条短信到系统中. 本节我们学习怎样获取系统的联系人,以及插入一条联系人 好.废话不多说了,直接操作. 首先和读取短信一样,先找到联系人在数据库中的位置. wa ...

  9. Android 四大组件学习之BroadcastReceiver三

    本节学习广播的分类. 广播分为无序广播和有序广播 无序广播: 广播发送者的action与广播接收者的action都匹配的话,所以广播介绍者都能够收到这条广播,而且没有先后顺序,能够觉得是同一时候收到 ...

随机推荐

  1. centos服务器/dev/xvda1空间占满的解决方法

    突然线上Centos的机器磁盘空间占满报警,第一反映是日志文件很大,占用了较多的磁盘空间.于是简单的上去看了一下.但是发现线上不是的地址对应的空间占的并不多.用:df -h 命令看了一下,/dev/x ...

  2. python模块中的__all__属性

    转自:http://blog.csdn.net/sxingming/article/details/52903377 python模块中的__all__属性,可用于模块导入时限制,如:from mod ...

  3. JDBC性能优化

    一.使用PreparedStatement的Batch功能 参见本人一下文章:http://blog.csdn.net/lmb55/article/details/50631062 二.选择合适的光标 ...

  4. 【PostgreSQL-9.6.3】LOG: unrecognized configuration parameter "dynamic_shared_memory_type"

    报错如下: 输入如下命令启动PG数据库时,报错: [postgres@drz ~]$ pg_ctl -D /opt/postgresql/data/ start server starting FAT ...

  5. Python 开发初识

    从今天开始记录自己的python开发之路,用博客记录自己的学习经历,以及学习小结,小的项目模块,努力充实,做最好的自己!!!

  6. dom4j使用方法详解

    本文先做知识点的简单介绍,最后附完整案例. 一.解析XML文件 public class Foo { //url为XML文档地址 //自己封装了一个工具类 返回解析完成的document public ...

  7. BZOJ3124: [Sdoi2013]直径 (树形DP)

    题意:给一颗树 第一问求直径 第二问求有多少条边是所有直径都含有的 题解:求直径就不说了 解第二问需要自己摸索出一些性质 任意记录一条直径后 跑这条直径的每一个点  如果以这个点不经过直径能到达最远的 ...

  8. 2n皇后 - 回溯

    题目地址:http://www.51cpc.com/web/problem.php?id=1172 Summarize: 1. 递归回溯: 2. 先扫完一种皇后,再扫描另一种: 3. 循环输入: 4. ...

  9. 『 Luogu P3205 』 HNOI2010 合唱队

    解题思路 设置两个二维数组 $f$ 和 $g$,含义如下. $f[l][r]$ 表示在期望得到的队形中 $l\rightarrow r$ 这段区间初始队形排列的方案数,并且最后一个加入进去的是第 $l ...

  10. Python学习笔记(2)数值类型

    进制转换 int函数任意进制转换为10进制 第一个参数传入一个字符串,任意进制的,第二个参数传入对这个字符串的解释,解释他为几进制 hex oct bin转换进制为16 8 或者2进制 例题中石油87 ...