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)。就差模拟器关机后开启看效果。我这边是没有成功,如果哪位大虾看到了效果,请告诉我。

时间: 2024-11-09 02:48:38

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

Android实战技巧之二十九:画布Canvas

Android Framework提供了一些2D画图的API,android.graphics包就是其中之一. 为了画一些东西,需要4个元素(或称组件)协同来完成: * 位图:Bitmap来保持(hold)那些像素 * 画布:Canvas来响应画画(draw)的调用(并将其写入bitmap) * 画笔:paint描述画画的颜色和样式等 * "颜料":drawing primitive,比如矩形.路径.文字.位图等其他元素 而这其中Canvas是比较重要的一环,今天就来演示Canvas的

Android实战技巧之二十四:横竖屏切换

这几年一直在做手机上和电视盒的App,几乎没有考虑过横竖屏切换的问题.电视盒好说,横屏不变,你要是给它设计个竖屏人家也没机会使:而手机上的应用就不好说了,有些界面你设计了横竖屏兼容可能是为了表示你的功能强大.但是按照惯例,或许也是设计师图省事,我们只是做一个方案.就像目前主流的App都只有竖屏一个模式,比如微信.京东和招商银行.我截了几张图表示一下. 但是像地图之类的应用,也许横屏会显示的更友好一些.请看腾讯地图的设计如下: 细心的你会发现,地图的横竖屏的样式几乎是一样的布局,调整起来还是比较容

Android实战技巧之二十五:模拟器如何重启?试试Genymotion!

需要测试Android 5.1系统重启后的一个功能,我手里的设备都没有这么高的版本,那么只好向模拟器求助了.就像大多网友一样,我遇到了一个大问题,如何将Android模拟器重启? 我有几个想法: * 长按模拟器的power kay,调出重启键.可惜的是系统默认只有poweroff一项. * adb reboot或者adb shell进入模拟器再执行reboot.尝试了几个模拟器,都没有成功,只听见我本子的cpu风扇在飞速的运转着. * 自己写一个重启的小应用做重启这件事.这是几年前我就想写的程序

Android实战技巧之二十二:Android 5.1 SDK下载与配置

重要文件下载地址: (1)http://dl-ssl.google.com/android/repository/sources-22_r01.zip (2)http://dl-ssl.google.com/android/repository/tools_r24.1.2-windows.zip (3)http://dl-ssl.google.com/android/repository/android-22_r01.zip (4)http://dl-ssl.google.com/android

Android实战技巧之二十八:启动另一个App/apk中的Activity

Android提供了在一个App中启动另一个App中的Activity的能力,这使我们的程序很容易就可以调用其他程序的功能,从而就丰富了我们App的功能.比如在微信中发送一个位置信息,对方可以点击这个位置信息启动腾讯地图并导航.这个场景在现实中作用很大,尤其是朋友在陌生的环境找不到对方时,这个功能简直就是救星. 本来想把本文的名字叫启动另一个进程中的Activity,觉得这样才有逼格.因为每个App都会运行在自己的虚拟机中,每个虚拟机跑在一个进程中.但仔细一想,能够称为一个进程,前提是这个App

Android实战技巧之二十:两个开源的图表/报表控件

项目中要用饼图和折线图表示数据,重造轮子不是咱风格,先了解一下时下比较流行的开源图表控件吧.调查发现有三个口碑不错的开源项目,它们是MPAndroidChart.AChartEngine.HoloGraphLibrary.由于AChartEngine源码放在code.google上,遂先放弃它,主要研究其他两个在github上的项目. HoloGraphLibrary 项目地址:https://github.com/Androguide/HoloGraphLibrary 简介:这是一个十分简单的

Android实战技巧之二十七:Maven编译开源二维码扫描项目zxing

拥有自己的手机软件工具箱是件非常有意义的事情.就目前国内Android的生态环境来说,混乱的不能再乱了.由于我们登录不了官网App商店,下软件就只好在国内五花八门的软件市场下载.由于这些市场的监管不力,什么样的软件都有,就拿二维码扫描软件来说,好多都带那种狗皮膏药一样的广告插件,真是特别讨厌. 在开源世界中有很多优秀的软件,其中zxing就是非常好的Android扫碼工具软件.我们可以拿来即用还可以学习内部机制,然后做些定制化个性化.既可以自己享用,又可以跟大家分享.真是不错. zxing在gi

Android实战简易教程-第十六枪(LineChart实现数据趋势展示)

aChartEngine中的line Chart是线图,是数据显示的一种.首先我们要下载aChartEngine的jar包,然后导入到工程中. 直接看一下代码(部分注释): package com.yayun.linechart; import java.util.ArrayList; import java.util.List; import org.achartengine.ChartFactory; import org.achartengine.chart.PointStyle; imp

Android实战技巧之二十三:Android Studio的NDK开发

较新的NDK版本是r10b,Android Studio对NDK开发的支持还处于构思阶段,所以很多工作比如用javah生成头文件等工作还要自己做.今天用一个例子来演示AS中的NDK开发. 新建一个项目SecondNdkTest 在此项目中新建一个Module叫ndklibrary,作为so库单独划出来.在library中新建一个java类SecondLib,内容如下: package com.linc.ndklibrary; /** * Created by linc on 15-3-29. *