当前位置: 首页 > news >正文

Android 异常开机半屏重启代码分析

Android 的稳定性是 Android 性能的一个重要指标,它也是 App 质量构建体系中最基本和最关键的一环;如果应用经常崩溃,或者关键功能不可用,那显然会对我们的留存产生重大影响所以为了保障应用的稳定性,我们首先应该树立对稳定性的正确认识从表现来看有:
死机重启
自动关机
无法开机
冻屏
黑屏
闪退
无响应

这也就说明了稳定性问题比较杂,且很多是概率性问题,没有统一处理方式,需要针对具体的问题,具体分析
一般来说:必现的问题较易解决,针对当前代码添加各种调试 log ,一步步 debug 去定位,过程虽然可能慢点,但一般都会解决
针对偶发性的概率问题,则较为麻烦,依赖于大量的测试复现,然后统计 分析当前抓取到的 events 、system 等 log 中,找到复现的步骤,然后去定位;且针对与这种概率问题,最好能够拿到当时的现场,所以有时候需要将 tombstone 或者 ANR 、crash 转为 ANR 去处理

在Android应用开发中,偶尔会因为测试的不充分导致一些异常没有被捕获,这时应用会出现异常并强制关闭,这样会导致很不好的用户体验,为了解决这个问题,我们需要捕获相关的异常并做处理。

首先捕获程序崩溃的异常就必须了解一下Java中UncaughtExceptionHandler这个接口,这个接口在Android开发上面也是可以使用的,在API文档中,我们可以了解到:通过实现此接口,能够处理线程被一个无法捕获的异常所终止的情况。如上所述的情况,handler将会报告线程终止和不明原因异常这个情况,如果没有自定义handler, 线程管理组就被默认为报告异常的handler。 ThreadGroup 这个类就是实现了UncaughtExceptionHandler这个接口,如果想捕获异常我们可以实现这个接口或者继承ThreadGroup,并重载uncaughtException方法。

public class CrashHandler implements UncaughtExceptionHandler {public static final String TAG = "CrashHandler";private static CrashHandler INSTANCE = new CrashHandler();private Context mContext;private CrashHandler() {}public static CrashHandler getInstance() {return INSTANCE;}public void init(Context context) {mContext = context;Thread.setDefaultUncaughtExceptionHandler(this);}@Overridepublic void uncaughtException(Thread thread, Throwable ex) {DebugTraceTool.debugTraceE(TAG, "some uncaughtException happend");new Thread() {@Overridepublic void run() {Intent intent = new Intent(mContext, MainActivity.class);PendingIntent restartIntent = PendingIntent.getActivity(mContext, 0, intent, Intent.FLAG_ACTIVITY_NEW_TASK);AlarmManager mgr = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 1000, restartIntent);android.os.Process.killProcess(android.os.Process.myPid());}}.start();}
}

K1/K2包括家教机H9/H10,异常重启的时候都会开机动画都会出现半屏现象:
在这里插入图片描述
在这里插入图片描述

为了造这个现象,用eclipse把system_process stop掉就可以看到现象了:
在这里插入图片描述

由于开机动画是由SurfaceFlinger服务启动,出现异常会调用SurfaceFlinger.cpp函数binderDied,经过调试修改代码如下:
在这里插入图片描述

终于OK!

备注:和屏幕初始化旋转有关系,把build_prop旋转90度,改为0度就不会有这个现象。

觉得本文对您有用,麻烦点赞、关注、收藏,您的肯定是我创作的无限动力,谢谢!!!

http://www.lryc.cn/news/348379.html

相关文章:

  • Kafka从0到消费者开发
  • 01-项目功能,架构设计介绍
  • bvh 好用强大的播放器源码
  • 安阳在线知识付费系统,培训机构如何进行课程体系的设置?
  • 网络编程:服务器模型-并发服务器-多进程
  • React 基础案例
  • 【Python探索之旅】选择结构(条件语句)
  • Recommender ~ Collaborative filtering
  • 我觉得POC应该贴近实际
  • AI 情感聊天机器人工作之旅 —— 与复读机问题的相遇与别离
  • 如何使用ArcGIS Pro进行选房分析
  • android图标底色问题,debug与release不一致
  • 如何提高自己的全局视野?
  • element ui的确认提示框文字样式修改
  • Typescript 哲学 - ts模块使用最佳实践
  • 自动驾驶决策规划——坐标转换
  • 信创应用软件之邮箱
  • TriCore: Architecture
  • 16进制与不同进制之间计算加减乘除的比较快的方法
  • 责任链模式:原理与实现解析,及其应用场景代入
  • 从心理学角度看,GPT 对人有什么影响?
  • 【C语言/数据结构】栈:从概念到两种存储结构的实现
  • 47. UE5 RPG 实现角色死亡效果
  • C语言/数据结构——每日一题(环形链表)
  • vue:网页icon无法显示
  • 电脑设置在哪里打开?Window与Mac双系统操作指南
  • 【linux】海量小文件的存储方案
  • 【SpringBoot整合系列】SpringBoot整合RabbitMQ-基本使用
  • MySQL————创建存储过程函数
  • 数据赋能(86)——数据要素:管理核心框架