文档章节

Recovery

GalaxyBruce
 GalaxyBruce
发布于 2017/01/16 16:25
字数 588
阅读 5
收藏 0

知识点:

RecoveryHandler.java
1、该类是Thread.UncaughtExceptionHandler的子类,截获系统异常并处理:
保存CrashData(count time shouldrestart)到SharedPreferences->获取堆栈信息->恢复recover()
2、Thread.getDefaultUncaughtExceptionHandler()对象,该对象是系统默认的异常处理对象,
com.android.internal.os.RuntimeInit$UncaughtHandler
3、recover()需要考虑的场景,程序在后台crash,是否要恢复;是浸默恢复还是显示界面恢复
调用RecoveryService.java和RecoveryActivity.java

RecoveryService.java和RecoveryActivity.java
都是具体执行恢复的地方,逻辑基本一样;RecoveryService.java是浸默恢复,RecoveryActivity.java是显
界面,让用户选择恢复方式。

CrashData.java
记录crash的次数、时间、是否应该重启。因为RecoveryActivity和RecoveryService是在其他进程中,
所以CrashData保存在SharedPreferences中。

RecoveryStore.java
保存栈中的所有Activity,以及顶部Activity的intent。可以根据这些activity获取对应的Intent,在恢复的时候调
用startActivities方法,就可以恢复栈。

ActivityStackCompat.java
获取Activity栈的工具类,5.0之前 5.0-6.0之间 6.0之后获取Activity栈的方式不同,5.0-6.0之间用
RecoveryStore类中保存的activity栈获取,其他的利用系统api获取。
getTopTaskBeforeL() getTopTaskAfterL()

Reflect.java 反射封装工具类,很好用。

SharedPreferencesCompat.java
可以参考里面的对applay方法的异步处理,以及Builder模式的使用。

RecoveryComponentHook.java
利用反射和动态代理替换系统内部的对象的私有成员变量。先通过反射获取android.app.ActivityManagerNative中的gDefault对象,再对gDefault对象进行动态代理。gDefault
对象也是IActivityManager接口的实现类,有对Activity生命周期操作的一系列函数。

ActivityManagerDelegate.java
对IActivityManager的动态代理,实现在栈恢复以后,栈顶activity按返回建时,如果栈中只有一个activity则
打开主界面。这里动态代理处理的方法时“finishActivity”; 个人觉得这样处理太麻烦,为什么不在RecoveryActivityLifecycleCallback.onActivityDestroyed 方法中处理呢?
动态代理(AOP)使用及实现原理分析

总结:

1、该项目并没有用到什么设计模式,主要是单例模式。
2、项目中大量用到反射,Reflect.java工具类可以收藏,非常好用。
3、SharedPreferencesCompat.java可以收藏,做一个工具类,其他需要保存的数据的地方再写一个xxxUtil.java,把存储业务和存储方法分开。
4、new对象放到类内部的静态方法里面
static RecoveryHandler newInstance(Thread.UncaughtExceptionHandler defHandler) { return new RecoveryHandler(defHandler); }

© 著作权归作者所有

GalaxyBruce
粉丝 2
博文 75
码字总数 35340
作品 0
南京
高级程序员
私信 提问
Android 的 Recovery 模式分析

Recovery Binary: (http://wenbind.blogcn.com/)   Recovery Binary 是 Android 进入 Recovery 模式所运行的程序,实现了 Recovery 模式下的功能。它由目录 bootable/recovery 下的源代...

枫影Xda
2012/09/07
0
0
Android系统Recovery工作原理之使用update.zip升级过程分析(四)---A...

Android系统Recovery模式的工作原理 在使用update.zip包升级时怎样从主系统(main system)重启进入Recovery模式,进入Recovery模式后怎样判断做何种操作,以及怎样获得主系统发送给Recover...

lxp198837
2012/06/26
0
0
还原真实的cache recovery

我们在学习Oracle基础知识的时候会了解到实例恢复(Instance Recovery)或者说崩溃恢复(Crash recovery)的概念,有时候甚至于这2个名词在我们日常的语言中表达同样的意思。实际上Instance Reco...

科技小能手
2017/11/12
0
0
Android系统Recovery工作原理之使用update.zip升级过程分析(六)---R...

Android系统Recovery工作原理之使用update.zip升级过程分析(六)---Recovery服务流程细节 Recovery服务毫无疑问是Recovery启动模式中最核心的部分。它完成Recovery模式所有的工作。Recover...

lxp198837
2012/06/26
0
0
sql语句给数据库减肥,下面以网狐6603数据库减肥脚本

网狐6603 专用数据库减肥特效脚本(18G变成300M)如下: 将脚本语句复制到sql server 新建查询中,执行即可,可以清楚冗余的日志 / 数据库超级减肥, 18G可变成300M. */ -- Truncate the log by...

yasewl
2017/07/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

JWT学习总结

官方 https://jwt.io 英文原版 https://www.ietf.org/rfc/rfc7519.txt 或 https://tools.ietf.org/html/rfc7519 中文翻译 https://www.jianshu.com/p/10f5161dd9df 1. 概述 JSON Web Token(......

冷基
今天
4
0
AOP的学习(1)

AOP 理解AOP编程思想(面向方法、面向切面) spring AOP的概念 方面 -- 功能 目标 -- 原有方法 通知 -- 对原有方法增强的方法 连接点 -- 可以用来连接通知的地方(方法) 切入点 -- 将用来插入...

太猪-YJ
今天
4
0
一张图看懂亮度、明度、光度、光亮度、明亮度

亮度、明度、光亮度,Luminance和Brightness、lightness其实都是一个意思,只是起名字太难了。 提出一个颜色模型后,由于明度的取值与别人的不同,为了表示区别所以就另想一个词而已。 因此在...

linsk1998
昨天
11
0
Python应用:python链表示例

前言 python链表应用源码示例,需要用到python os模块方法、函数和类的应用。 首先,先简单的来了解下什么是链表?链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是...

python小白1
昨天
5
0
Source Insight加载源码

Source Insight是一个图形化的源代码查看工具(当然也可以作为编译工具)。如果一个项目的源代码较多,此工具可以很方便地查找到源代码自建的依赖关系。 1.创建工程 下图为Snort源代码的文件...

天王盖地虎626
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部