android 崩溃捕获框架,DefenseCrash
Android App防崩溃框架
一、初始化
在Application onCreate()方法中进行初始化
DefenseCrash.install(context, object : ExceptionHandler() {
override fun onUncaughtExceptionHappened(thread: Thread, throwable: Throwable) {
Log.e("DefenseCrash", "onUncaughtExceptionHappened->" + throwable.localizedMessage)
}
override fun onBandageExceptionHappened(throwable: Throwable) {
Log.e("DefenseCrash", "onBandageExceptionHappened->" + throwable.localizedMessage)
}
override fun onEnterSafeMode() {
Log.e("DefenseCrash", "onEnterSafeMode")
}
override fun onMayBeBlackScreen(throwable: Throwable) {
Log.e("DefenseCrash", "onMayBeBlackScreen->" + throwable.localizedMessage)
//黑屏时应杀死进程
exitProcess(0)
}
})
二、框架原理
第一步、通过替换ActivityThread.mH.mCallback,实现拦截Activity生命周期。当在生命周期方法中出现异常时,则通过调用ActivityManager的finishActivity结束掉生命周期抛出异常的Activity
第二步、自定义Thread.UncaughtExceptionHandler,当出现异常时,会进入while死循环,如果while内部是空的就会导致代码卡在这里,最终导致ANR,但在while死循环中又调用了Looper.loop(),这就导致主线程又开始不断的读取queue中的Message并执行,这样就可以保证以后主线程的所有异常都会从我们手动调用的Looper.loop()处抛出,一旦抛出就会被try{}catch捕获,这样主线程就不会crash了,如果没有这个while的话那么主线程下次抛出异常时我们就又捕获不到了,这样APP就又crash了,所以我们要通过while让每次crash发生后都再次进入消息循环,while的作用仅限于每次主线程抛出异常后迫使主线程再次进入消息循环。
while (true) {
try {
Looper.loop()
} catch (t: Throwable) {
isChoreographerException(t)
sExceptionHandler?.bandageExceptionHappened(t)
}
}
android 崩溃捕获框架,DefenseCrash相关推荐
- android 崩溃捕获_Android从相机和图库捕获图像
android 崩溃捕获 In this tutorial we'll develop an application that picks an image from camera or galler ...
- android 崩溃捕获_Android使用FileProvider捕获图像相机图库
android 崩溃捕获 In this tutorial, we'll be developing an application which displays images captured fro ...
- Android崩溃日志框架,崩溃日志上传框架 LogReport
软件介绍 LogReport是一个崩溃日志上传框架 ,当App崩溃的时,把崩溃信息保存到本地的同时,自动给GitHub提交崩溃issue,你只需要几句,就能完成所有配置,更多细节请了解下方 另外,崩溃 ...
- Android 平台的Crash崩溃捕获-全
上层-java/kotlin: Android应用层java/kotlin的crash捕获相对容易.直接实现Thread.UncaughtExceptionHandler即可处理收集.Thread.U ...
- android 崩溃日志捕获,安卓Java崩溃的捕获和日志记录
Android的两种崩溃 Android 崩溃分为 Java 崩溃和 Native崩溃两种. Java崩溃的知识点 Java崩溃.png Java崩溃的原因 简单来说,Java崩溃就是在Java代码中 ...
- android 多线程 崩溃,Android异常崩溃捕获
Android系统碎片化造成应用程序崩溃严重,在模拟器上运行良好的程序安装到某款手机上说不定就会出现崩溃的现象.而且,往往都是程序发布之后在用户端出现了崩溃现象.所以在程序发布出去之后,如果出现了崩溃 ...
- MvvmLazy Android懒人框架
MvvmLazy Android懒人框架(kotlin版) 目前,android流行的MVC.MVP模式的开发框架很多,然而一款基于MVVM模式开发框架却很少. 个人搜寻了市面上大量的开源框架,秉承减 ...
- 15类Android通用流行框架
15类Android通用流行框架 Android流行框架 缓存 DiskLruCache Java实现基于LRU的磁盘缓存 图片加载 Android Universal Image Loader 一个 ...
- Android常用开源框架
快速索引 框架名称 上榜关键字 1.Retrofit 网络 2.okhttp 网络 3.Butter Knife 代码模板 4.MPAndroidChart 图表 5.glide 图片 6.leakc ...
最新文章
- java反序列化weblogic_[Todo]Java反序列化-weblogic
- 在计算机网络俗称网上邻居上能看到自己,能看到自己计算机,看不到网上邻居的标准答案...
- 一步步学习操作系统(1)——参照ucos,在STM32上实现一个简单的多任务(“啰里啰嗦版”)...
- java深拷贝和浅拷贝介绍
- “等等党”的春天到了?高端显卡暴降35% 华强北商家:还会继续降
- 9-13 ruby环境准备
- redis rdb aof区别_干货|Redis的RDB和AOF
- webService的使用-----Eclipse
- @Import注解的作用
- 《Java高并发编程详解:多线程与架构设计》笔记(一)
- ad15图层显示_AD15视图配置窗口太大点击不了确定怎么设置?
- apply,call,bind重新定义this的区别
- 七.OpenCv图像轮廓
- Android NDK交叉编译sysstat工具
- 迪士尼电影越来越受欢迎
- Inventor制作动画
- 关于Java的位移运算
- js 动态修改iframe的src
- H3C EPON技术白皮书
- [转]转型后的BlackBerry“恋上”汽车市场,QNX拿什么与免费的安卓/Linux对抗?
热门文章
- 【转】boost 库后缀名
- MEF程序设计指南(转)
- Python之数据分析(坐标刻度定位器、散点图、柱状图、颜色区域填充)
- Python+socket+多线程实现同时应答多客户端的自助聊天机器人
- 基于mpi的奇偶排序_基于MPI的PSRS并行排序算法的实现
- 32时间片轮转_【解惑】到底是quot;时间片quot;?还是quot;分时轮询quot;?
- micropython中文教程.pdf_micropython中文教程
- 关于图像三通道和单通道的解释
- 关于二叉树路径的遍历和处理
- xml文件转为ftl_idea freemarker热部署,自动加载修改的ftl页面