这里我会具体分析一个 system crash(原文:安卓开发中遇到的奇奇怪怪的问题(三)),以后面试用来吹比也是可以的

推荐阅读

  • 提升Android下内存的使用意识和排查能力
  • 再谈Finalizer对象–大型App中内存与性能的隐性杀手
  • https://blog.csdn.net/qq_17766199/article/details/84789495#t1

Crash log :

java.util.concurrent.TimeoutException: android.os.BinderProxy.finalize() timed out after 10 seconds
at android.os.BinderProxy.destroy(Native Method)
at android.os.BinderProxy.finalize(Binder.java:459)

1. 寻找共性

主要集中在 oppo 5.0~6.0 及个别 华为 5.0机型

2. 查看错误堆栈信息

FinalizerWatchdogDaemon
java.util.concurrent.TimeoutException
android.os.BinderProxy.finalize() timed out after 120 seconds
android.os.BinderProxy.destroy(Native Method)
android.os.BinderProxy.finalize(Binder.java:547)
java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:214)
java.lang.Daemons$FinalizerDaemon.run(Daemons.java:193)
java.lang.Thread.run(Thread.java:818)

3. 分析

GC 时,为了减少应用程序的停顿,会启动四个 GC 相关的守护线程.FinalizerWatchdogDaemon 就是其中之一,它是用来监控 FinalizerDaemon 线程的执行。

FinalizerDaemon:析构守护线程。对于重写了成员函数finalize的对象,它们被GC决定回收时,并没有马上被回收,而是被放入到一个队列中,等待FinalizerDaemon守护线程去调用它们的成员函数finalize,然后再被回收。

一旦检测到执行成员函数 finalize 时超出一定的时间,那么就会退出 VM。我们可以理解为 GC 超时了。这个时间默认为 10s,我通过翻看 oppo、华为的 Framework 源码发现这个时间在部分机型被改为了 120s30s

虽然时间加长了,但还是一样的超时了,具体在oppo手机上为何这么慢,暂时无法得知,但是可以肯定的是 Finalizer 对象过多导致的。知道了原因,所以要模拟这个问题也很简单了。也就是引用一个重写 finalize 方法的实例,同时这个 finalize 方法有耗时操作,这时我们手动 GC 就行了。Demo。

4. 解决方案

  • https://blog.csdn.net/qq_17766199/article/details/84789495#t1

参考链接

  • https://blog.csdn.net/qq_17766199/article/details/84789495#t1

Android app 崩溃 Crash 分析(二)奇怪的 TimeoutException相关推荐

  1. Android app 崩溃 Crash 分析(一)

    如何收集崩溃日志的总结 收集崩溃时的基本信息 进程(前台进程还是后台进程) 线程(是否是 UI 线程) 崩溃堆栈(具体崩溃在系统的代码,还是我们自己的代码里面) 崩溃堆栈类型(Java 崩溃.Nati ...

  2. iOS线上APP崩溃(Crash)分析

    这两周一直在研究如何追踪线上的bug,如何快速分析出程序到底崩溃在什么地方,从底层了解Crash是如何产生的.如何传递的.以及是如何分析出来的.虽然项目组并没有对这些要求很严格,但是作为一个高级开发人 ...

  3. Android App加固原理分析

    Android App加固原理分析 对App进行加固,可以有效防止移动应用被破解.盗版.二次打包.注入.反编译等,保障程序的安全性.稳定性.对于金融类App,尤其重要. 对App dex进行加固的基本 ...

  4. Android 应用性能优化(4)---Android App性能评测分析-启动时间篇

    Android App性能评测分析-启动时间篇 1.前言 随着项目版本的迭代,App的性能问题会逐渐暴露出来,而好的用户体验与性能表现紧密相关,性能问题从应用的启动优化开始,下面会根据实际app性能测 ...

  5. Android App性能评测分析

    Android App性能评测分析-启动时间篇 Android App性能评测分析-网络流量篇 Android App性能评测分析-内存篇 Android App性能评测分析-cpu占用篇 Andro ...

  6. android 恶意应用,对恶意Android应用Bangle Android App Packer的分析

    原标题:对恶意Android应用Bangle Android App Packer的分析 写在前面的话 近日Trustlook Labs发现了一个恶意安卓应用程序,它使用社会工程手法诱骗用户安装.这个 ...

  7. 由Asset中的double free引发的Android系统及APP崩溃问题分析

    前言 这个问题在来小米之前就遇到并解决过,当时的解决方案与朴老师的初步解决方案一样,本文在之前的初步分析结果之上进一步进行了深入分析,最终得出了当前看起来相对合理并符合原来架构设计的最终方案. 文中引 ...

  8. android内存占用分析,Android App性能评测分析-内存篇

    1.内存了解 在Android App的性能优化的各个部分里,内存方面的知识较多且不易理解,内存的问题绝对是最令人头疼的一部分,需要对内存基础知识.内存分配.内存管理机制等非常熟悉,才能排查问题. 1 ...

  9. Android App性能评测分析-流畅度篇

    1.前言 在手机App竞争越来越激烈的今天,Android App的各项性能特别是流畅度不如IOS,安卓基于java虚拟机运行,触控响应的延迟和卡顿比IOS系统严重得多.一些下拉上滑.双指缩放快速打字 ...

最新文章

  1. linux中sqlplus不能用_装修中不能用海沙,但是海沙已经偷偷走进了你的家
  2. c语言调用dll实例 结构体传参,C# 调用Dll 传递字符串指针参(转)
  3. java中week of year_Java WeekFields weekOfYear()用法及代码示例
  4. 2020年学python_Python学习路线图(2020年最新版)
  5. ajax调用后台java类_ajax调用java后台方法是什么
  6. 字符串 charat_Java | String.charAt(index)| 从字符串中按索引获取字符
  7. Xcode插件管理工具Alcatraz
  8. 计算机完成了加法操作执行的是,cpu是通过运算器中的什么来完成加法运算的
  9. L1-008 求整数段和 (10 分)—团体程序设计天梯赛
  10. 多线程与多进程(4)
  11. php图像生成和处理,PHP的gd库(图像生成和处理)的应用
  12. 2008年8月30日人力资源系统启动会
  13. C++ 获取分辨率 获取桌面分辨率
  14. 鸿蒙电视rom,华为鸿蒙os刷机包
  15. 阵列天线方向图-均匀直线/平面阵列matlab仿真
  16. 70 个数据分析常用网址!
  17. Word 2013 无法撤销操作的错误
  18. iPhone13有3D Touch吗 3D Touch有什么用
  19. 【JavaSE】多线程基础
  20. D3D学习笔记1-D3D9设备的初始化

热门文章

  1. 企业财务制度二--会计科目名称和编号(一)1301 待摊费用(转载)
  2. Mac微信代理服务器
  3. HTML简单内容小结(1)
  4. 提取txt文件某一列数据,并保存为txt文件
  5. 超全!互联网大厂薪资和职级一览
  6. 领导者与管理者有什么区别?
  7. 浙江应用计算机考试考什么条件,浙江软考都考什么?
  8. Mxgraph 使用教程(2):mxgraph常用方法介绍
  9. matlab里的随机数函数,MATLAB中常用的产生随机数的几种函数
  10. Springboot+vue 外卖订餐餐饮管理系统#毕业设计