Android app 崩溃 Crash 分析(二)奇怪的 TimeoutException
这里我会具体分析一个 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
源码发现这个时间在部分机型被改为了 120s
和 30s
。
虽然时间加长了,但还是一样的超时了,具体在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相关推荐
- Android app 崩溃 Crash 分析(一)
如何收集崩溃日志的总结 收集崩溃时的基本信息 进程(前台进程还是后台进程) 线程(是否是 UI 线程) 崩溃堆栈(具体崩溃在系统的代码,还是我们自己的代码里面) 崩溃堆栈类型(Java 崩溃.Nati ...
- iOS线上APP崩溃(Crash)分析
这两周一直在研究如何追踪线上的bug,如何快速分析出程序到底崩溃在什么地方,从底层了解Crash是如何产生的.如何传递的.以及是如何分析出来的.虽然项目组并没有对这些要求很严格,但是作为一个高级开发人 ...
- Android App加固原理分析
Android App加固原理分析 对App进行加固,可以有效防止移动应用被破解.盗版.二次打包.注入.反编译等,保障程序的安全性.稳定性.对于金融类App,尤其重要. 对App dex进行加固的基本 ...
- Android 应用性能优化(4)---Android App性能评测分析-启动时间篇
Android App性能评测分析-启动时间篇 1.前言 随着项目版本的迭代,App的性能问题会逐渐暴露出来,而好的用户体验与性能表现紧密相关,性能问题从应用的启动优化开始,下面会根据实际app性能测 ...
- Android App性能评测分析
Android App性能评测分析-启动时间篇 Android App性能评测分析-网络流量篇 Android App性能评测分析-内存篇 Android App性能评测分析-cpu占用篇 Andro ...
- android 恶意应用,对恶意Android应用Bangle Android App Packer的分析
原标题:对恶意Android应用Bangle Android App Packer的分析 写在前面的话 近日Trustlook Labs发现了一个恶意安卓应用程序,它使用社会工程手法诱骗用户安装.这个 ...
- 由Asset中的double free引发的Android系统及APP崩溃问题分析
前言 这个问题在来小米之前就遇到并解决过,当时的解决方案与朴老师的初步解决方案一样,本文在之前的初步分析结果之上进一步进行了深入分析,最终得出了当前看起来相对合理并符合原来架构设计的最终方案. 文中引 ...
- android内存占用分析,Android App性能评测分析-内存篇
1.内存了解 在Android App的性能优化的各个部分里,内存方面的知识较多且不易理解,内存的问题绝对是最令人头疼的一部分,需要对内存基础知识.内存分配.内存管理机制等非常熟悉,才能排查问题. 1 ...
- Android App性能评测分析-流畅度篇
1.前言 在手机App竞争越来越激烈的今天,Android App的各项性能特别是流畅度不如IOS,安卓基于java虚拟机运行,触控响应的延迟和卡顿比IOS系统严重得多.一些下拉上滑.双指缩放快速打字 ...
最新文章
- linux中sqlplus不能用_装修中不能用海沙,但是海沙已经偷偷走进了你的家
- c语言调用dll实例 结构体传参,C# 调用Dll 传递字符串指针参(转)
- java中week of year_Java WeekFields weekOfYear()用法及代码示例
- 2020年学python_Python学习路线图(2020年最新版)
- ajax调用后台java类_ajax调用java后台方法是什么
- 字符串 charat_Java | String.charAt(index)| 从字符串中按索引获取字符
- Xcode插件管理工具Alcatraz
- 计算机完成了加法操作执行的是,cpu是通过运算器中的什么来完成加法运算的
- L1-008 求整数段和 (10 分)—团体程序设计天梯赛
- 多线程与多进程(4)
- php图像生成和处理,PHP的gd库(图像生成和处理)的应用
- 2008年8月30日人力资源系统启动会
- C++ 获取分辨率 获取桌面分辨率
- 鸿蒙电视rom,华为鸿蒙os刷机包
- 阵列天线方向图-均匀直线/平面阵列matlab仿真
- 70 个数据分析常用网址!
- Word 2013 无法撤销操作的错误
- iPhone13有3D Touch吗 3D Touch有什么用
- 【JavaSE】多线程基础
- D3D学习笔记1-D3D9设备的初始化