亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

Android Activity狀態保存

標簽:
Java Android
引用资源的两种方式

在java中R.string.app_name
在xml中@string/app_name
#

突发情况列举

点击back键

点击锁屏键

点击home键

其他APP进入前台

启动了另一个Activity

屏幕方向旋转

APP被Kill

只有点击back键,onSaveInstanceState方法不会调用。其余的情况下, 该方法一律都会调用,onPause()一定会调用。

onSaveInstanceState何时调用

Android calls onSaveInstanceState() before the activity becomes vulnerable to being destroyed by the system, but does not bother
calling it when the instance is actually being destroyed by a user
action (such as pressing the BACK key)

比如按住返回键主动销毁时候,onSaveInstanceState不会调用。当我们的Activity处于极易被摧毁的时候,系统会调用 onSaveInstanceState() 方法。

Android View控件的onSaveInstanceState()方法

当我们在创建一个Activity对象的时候,我们如果没有重写父类的 onSaveInstanceState()方法,此时我们的一些Activity状态也会通过调用父类Activity的默认的 onSaveInstanceState()方法来保存下来。特别地:父类的onSaveInstanceState()方法会调用布局文件中每一个View对象的相应的 onSaveInstanceState()方法 来保持各自的状态。在Android的大多数的widget控件都非常好的实现了 onSaveInstanceState()方法,因此我们对这些空间的值的改变都会被自动的保存下来。例如我们的EditText、Checkbox控件,当我们在输入了我们的值只会,当Activity被destroy-->recreate的时候,此时我们的值仍然会被保存下来。

前提是:

如果我们需要保存一个View控件的状态,我们必须要给其指定一个唯一的标识符(通过 android:id 属性来指定),如果我们没有指定的话,系统则不会保存其状态。

对于一些不能自动保存状态的控件,就需要手动去实现

保存数据:

protected void onSaveInstanceState(Bundle bundle){
super.onSaveInstanceState(outState);
String tempData = textView.getText();//textView指活动中声明的TextView控件
bundle.putString("data",tempData);
}

恢复数据:在onCreat()方法中有Bundle类型的参数,一般情况下都是null。但是当活动被系统回收之前有通过onSaveInstanceState()方法来保存数据的话,这个参数就会带有之前所保存的全部数据,只需要再通过相应的取值方法将数据取出即可。

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//隐藏标题栏
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
if (savedInstanceState != null) {
String tempData = savedInstanceState.getString("data");
}
……
}
总结

尽管默认的Activity的onSaveInstanceState() 方法会保存我们的View控件的状态,但是我们仍然推荐重新其onSaveInstanceState() 方法来保存我们额外的一些Activity的状态,在分别重写 onCreate()、onSaveInstanceState() 和 onRestoreInstanceState()方法时,我们要首先调用父类的方法才行,这样就会默认的保存我们View控件的状态了。

因为 onSaveInstanceState() 方法不能保证一定会被调用,所以我们在onSaveInstanceState() 方法中只能用来保存我们的Activity的临时的状态信息,而对于要持久化保存的对象或状态,我们应该在 onPause() 方法中来做。

参考:

http://www.cnblogs.com/xiaoluo501395377/p/3418542.html
http://www.jianshu.com/p/6622434511f7
《第一行代码》

點擊查看更多內容
1人點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
移動開發工程師
手記
粉絲
424
獲贊與收藏
5663

關注作者,訂閱最新文章

閱讀免費教程

感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消