Android高低温导致ANR日志分析过程(高温导致音谱功能卡住)

一、起因

公司产品在做高低温试验的时候发现只要高温超过85度,打开音乐播放器的音乐图谱就会出现ANR崩溃。

二、ANR日志分析

要能看懂anr日志,首先要知道以下信息:

  • 这是我发生anr的app和时间
    这个可以配合导出的logcat时间点配合分析。
    在这里插入图片描述

  • anr中涉及到的java线程中的6中状态:

状态翻译解释
NEW初始新创建了一个线程对象,但还没有调用start()方法
RUNNABLE运行Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状态(ready)。就绪状态的线程在获得CPU时间片后变为运行中状态(running)。
BLOCKED阻塞表示线程阻塞于锁。
WAITING等待进入该状态的线程需要等待其他线程做出一些特定动作(通知或中断)。
TIMED_WAITING超时等待该状态不同于WAITING,它可以在指定的时间后自行返回。
TERMINATED终止表示该线程已经执行完毕。

那我们找到主线程main堆栈状态为RUNNABLE的:


suspend all histogram:	Sum: 56.798s 99% C.I. 2.637us-2339.669us Avg: 94.067us Max: 18093us
DALVIK THREADS (48):
"main" prio=5 tid=1 Runnable
  | group="main" sCount=0 dsCount=0 flags=0 obj=0x725a43c8 self=0xf8ed53c03c00
  | sysTid=3615 nice=-10 cgrp=default sched=0/0 handle=0xf8ed5515ded0
  | state=R schedstat=( 44641241731518 3758183587013 42430434 ) utm=4179293 stm=284831 core=3 HZ=100
  | stack=0xffffe44ea000-0xffffe44ec000 stackSize=8192KB
  | held mutexes= "mutator lock"(shared held)
  at com.tyw.media.widget.music.Utils.calcPoint(Utils.java:213)
  at com.tyw.media.widget.music.WaveRingView.setWaveData(WaveRingView.java:271)
  at com.tyw.media.widget.music.VisualizerHelper.dispose(VisualizerHelper.java:76)
  at com.tyw.media.widget.music.VisualizerHelper.access$000(VisualizerHelper.java:11)
  at com.tyw.media.widget.music.VisualizerHelper$1.onFftDataCapture(VisualizerHelper.java:37)
  at android.media.audiofx.Visualizer$NativeEventHandler.handleCaptureMessage(Visualizer.java:693)
  at android.media.audiofx.Visualizer$NativeEventHandler.handleMessage(Visualizer.java:721)
  at android.os.Handler.dispatchMessage(Handler.java:107)
  at android.os.Looper.loop(Looper.java:214)
  at android.app.ActivityThread.main(ActivityThread.java:7407)
  at java.lang.reflect.Method.invoke(Native method)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1030)

其中这行at com.tyw.media.widget.music.Utils.calcPoint(Utils.java:213)是关建行,耗时操作造成了ANR.

三、其他参数说明

Total number of allocations 476778  //进程创建到现在一共创建了多少对象

Total bytes allocated 52MB //进程创建到现在一共申请了多少内存

Total bytes freed 52MB   //进程创建到现在一共释放了多少内存

Free memory 777KB    //不扩展堆的情况下可用的内存

Free memory until GC 777KB  //GC前的可用内存

Free memory until OOME 383MB  //OOM之前的可用内存

Total memory 28MB//当前总内存(已用+可用)

Max memory 384MB  //进程最多能申请的内存

疑问

为什么有状态为native的?
因为这个日志是cpp打印的,他的状态和java是不一样的。参考其他大神截图:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

写点啥呢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值