关于Android ANR的思考
来源:互联网 发布:java语言程序设计下载 编辑:程序博客网 时间:2024/05/21 14:42
最近在做一些App OEM 相关的工作,在Monkey 测试中,表现的不是很好,所以做了一些梳理工作。
- Android ANR的原因。
- Android ANR 的分类。
- Android ANR 的排查。
- Android ANR 的解决。
1 .Android ANR的原因
ANR:Application Not Responding,即应用无响应。其实说句人话,就是在Main Thread 做了不该做的事情。就这个原因。
2 . Android ANR的分类
ANR一般有三种类型:
KeyDispatchTimeout(5 seconds) –主要类型按键或触摸事件在特定时间内无响应
BroadcastTimeout(10 seconds) –BroadcastReceiver在特定时间内无法处理完成
ServiceTimeout(20 seconds) –小概率类型 Service在特定的时间内无法处理完成
3. Android ANR的排查
ANR 一般排查会查看trace文件,但是trace文件包含的内容其实很有限。最应该看的日志是Logcat以及eventlog日志,原因很简单,Logcat日志无所不包,是最基本的日志文件。 步骤: 1. 找到ANR关键字(大写匹配) 2. 向上查找timeout关键字,这个时候能找到ANR的原因,如: Application do too much work in main thread 等。 3. 查看trace 文件找出出现的最终原因。 给出一个具体的示范。
package com.example.suj.anr;import android.support.v4.widget.TextViewCompat;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import java.util.concurrent.TimeUnit;public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); } @Override protected void onResume() { super.onResume();// try {// Log.e("suj","start sleep");// TimeUnit.SECONDS.sleep(12);// } catch (InterruptedException e) {// e.printStackTrace();// } } private void init() { findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { while (true){ } } }); }}
大家可以很清晰的看到我写了一个死循环。
下面给出Logcat 的日志:
ANR时刻如下:
ANR原因如下:
trace 文件如图:
下一篇博客讲解非常规ANR的解决方法。
0 0
- 关于Android ANR的思考
- 关于Android中ANR的一些思考
- 关于Android中ANR的一些思考
- 关于Android中ANR的一些思考
- 关于Android中ANR的一些思考
- 关于Android中ANR的一些思考总结
- 【Android】关于ANR的处理
- 关于android中的ANR
- android中关于ANR
- Android 关于ANR的学习,如何来避免ANR的发生
- android 的ANR问题
- Android的ANR分析
- Android的ANR详解
- Android的ANR处理
- android-ANR的解析
- 关于 Android AIDL的思考
- 关于ANR的官方建议
- 关于ANR的官方建议
- SQL中全局变量和局部变量的区别及用法
- 离线安装Maven插件
- 深度学习(DL)与卷积神经网络(CNN)学习随笔-05-基于Python的LeNet之CNN
- 118. Pascal's Triangle (python)
- 通过Shiro完成基础的身份认证
- 关于Android ANR的思考
- 使用TextView实现ImageView效果
- LeetCode学习篇十一——Range Sum Query - Immutable
- MySQL——数据库语言+语法
- HPC —— 高性能计算
- 119. Pascal's Triangle II (python)
- node.js利用javascript中构造函数继承,实现模块调用
- android快速实现毛玻璃效果
- 121. Best Time to Buy and Sell Stock (python)