Android实战技巧之二十六:persistableMode与Activity的持久化

API 21为Activity增加了一个新的属性,只要将其设置成persistAcrossReboots,activity就有了持久化的能力,另外需要配合一个新的bundle才行,那就是PersistableBundle。
这里的持久化与传统意义的不同,它的具体实现在Activity重载的onSaveInstanceState、onRestoreInstanceState和onCreate方法。

public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState)

public void onRestoreInstanceState(Bundle savedInstanceState, PersistableBundle persistentState)

public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState)

onSaveInstanceState和onRestoreInstanceState方法是一对拯救灾难的方法,它们不在“正常“的Activity生命周期中,只有一些突发异常情况才会触发它们,比如横竖屏切换、按Home键等。当API 21后增加了PersistableBundle参数,令这些方法有了系统关机重启后数据恢复的能力。

网友们评价不一,但是无论如何这都为我们提供了一种便利。而它应用的场景是异常的状况,不会影响我们正常的数据持久化办法。比如在pause方法中做一些操作Preferences,文件I/O,SQLite数据库,ContentProvider等常规办法。

如何实践呢?
只需在Manifest中的activity设置属性:

android:persistableMode="persistAcrossReboots"

然后在activity中直接用上述的三个方法即可。
另外注意API版本是21及以上。

验证是个难题。因为我没有5.0及以上系统的设备,求助与模拟器吧,各种问题都来了。无论是Genymotion还是自带的模拟器,在关机的过程中模拟器都会卡死。虽然我在log里看到了程序已经走过了onSaveInstanceState(Bundle,PersistableBundle)。就差模拟器关机后开启看效果。我这边是没有成功,如果哪位大虾看到了效果,请告诉我。

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值