码迷,mamicode.com
首页 > 其他好文 > 详细

activity的重建

时间:2019-08-25 14:00:49      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:you   数据   情况   开发者   onpause   home   stat   oncreate   store   

activity的重建:
处于后台的activity可能由于系统内存资源不足或由于长时间处于stopped状态未被使用,也可能因activity的优先级较低而被系统销毁,系统会记录下activity的一些状态信息,通过bundle实例以键值对的集合存储一些数据记录,即“实例状态”,比如每个view中的EditText的输入的文本信息。
onPause()和onSaveInstanceState()不同的是:onPause()方法用于数据持久化的保存,而onSaveInstanceState()方法用于保存activity一些临时的状态。
为了保存更多需要恢复的状态信息,开发者需要重写onSaveInstanceState()回调方法,当activity被意外销毁时,系统会以bundle为参数回调IOnSaveInstanceState()方法。当系统需要重建该activity时,将这个bundle对象传给Oncreate()方法和onRestoreInstanceState()方法,将activity恢复到被销毁前的状态。

什么情况下onSaveInstanceState()会被调用呢?

(1)按下home键时

(2)长按home键,选择运行其他程序时

(3)关闭屏幕显示时

(4)从一个activity中启动一个新的activity时

(5)屏幕状态切换时

重写onSaveInstanceState()如:

public class DemoActivity extends Activity{

private String userName;
.....
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("name",userName);
}
}

将activity重建有两种途径:第一种是通过onCreate(bundle)重建。当新建一个activity或者是重建一个已有保存实例状态的activity时,onCreate()都会被调用,当onSaveInstanceSate()被调用后才会将保存了实例状态的bundle传给onCrate(),所以先判断bundle是否为空,再做状态恢复。
public class DemoActivity extends Activity{

private String userName;
.....
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_more_record);
   if(savedInstanceState!=null){
         userName=savedInstanceState.getString("name");
   }
    ...
 }
...
}
第二种是通过之后调用的onRestoreInstanceState()方法恢复状态。与onCreate()方法不同的是,onRestoreInstanceSate()方法在存在实例状态数据数据时(即onSaveInstanceState()在activity被销毁时调用过),onRestoreInstanceState()才会被调用,所以这里不用再判断bundle是否为空。
public class DemoActivity extends Activity{

private String userName;
.....

 @Override
 protected void onRestoreInstanceState(Bundle savedInstanceState) {
      super.onRestoreInstanceState(savedInstanceState);
      userName=savedInstanceState.getString("name");
 }
}
需要注意的是:总是调用super类的onSaveInstanceState()和onRestoreInstaceState()执行默认操作以确保将View架构的状态信息得到保存。

activity的重建

标签:you   数据   情况   开发者   onpause   home   stat   oncreate   store   

原文地址:https://www.cnblogs.com/irving-zq/p/11407633.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!