快速定位Android闪退问题的方法
2017-08-23 11:15
405 查看
写Android程序时,经常会遇到各种各样的问题导致应用闪退。下面就来总结下应用闪退时,我们有什么方法去定位问题。
首先我们应该用 adb logcat -v time 命令把日志打印出来,直接用AS的logcat也可以,只是有的时候logcat会出现清空日志的情况,还是adb命令的日志靠谱。
有了日志,可以通过查找以下几个字段来快速定位问题:
Exception:查看所有发生异常的地方,看看是不是有没有捕获到的异常。
例如:下面这个异常就是日志打印出来的一个未捕获的异常,它可以准确地告诉我是哪个类的哪个方法,哪一行出了错误,这样就可以快速找到问题。
ANR:查看应用是否出现了ANR的情况。
在Android中,程序的响应性是由Activity Manager与Window Manager系统服务来负责监控的。当系统监测到下面的条件之一时会显示ANR的对话框:
(1)对输入事件(例如硬件点击或者屏幕触摸事件),5秒内都无响应。
(2)BroadReceiver不能够在10秒内结束接收到任务。
例如:下面这个ANR异常就是由于BroadReceiver产生的,其原因是因为CPU占用达到100%出现的,这个时候就要去看下是自己进程的CPU占用率过高,还是别的程序CPU占用率过高。如果是自己的程序,就要看日志,执行了什么操作导致CPU占用率太高。我这里是同时播放很多gif图的时候出现的。
OOM:当应用占用的内存超过了系统可以给应用分配的最大内存时,就会出现OOM。通常在decode Bitmap对象、在xml文件中inflate大的背景图片、内存泄露时,应用很容易就会出现OOM。
例如:下面这个OOM就是在decode图片时出现的。解决这种异常可以采用更小的采样率或者直接更换小的图片。
首先我们应该用 adb logcat -v time 命令把日志打印出来,直接用AS的logcat也可以,只是有的时候logcat会出现清空日志的情况,还是adb命令的日志靠谱。
有了日志,可以通过查找以下几个字段来快速定位问题:
Exception:查看所有发生异常的地方,看看是不是有没有捕获到的异常。
例如:下面这个异常就是日志打印出来的一个未捕获的异常,它可以准确地告诉我是哪个类的哪个方法,哪一行出了错误,这样就可以快速找到问题。
08-16 17:27:01.792 E/dalvikvm( 4392): threadid=1: thread exiting with uncaught exception (group=0x40a521f8) 08-16 17:27:01.822 E/System.err( 4392): java.lang.NoSuchMethodError: ****.setBackground 08-16 17:27:01.832 E/System.err( 4392): at android.view.LayoutInflater.rInflate(LayoutInflater.java:747) 08-16 17:27:01.832 E/System.err( 4392): at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 08-16 17:27:01.842 E/System.err( 4392): at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
ANR:查看应用是否出现了ANR的情况。
在Android中,程序的响应性是由Activity Manager与Window Manager系统服务来负责监控的。当系统监测到下面的条件之一时会显示ANR的对话框:
(1)对输入事件(例如硬件点击或者屏幕触摸事件),5秒内都无响应。
(2)BroadReceiver不能够在10秒内结束接收到任务。
例如:下面这个ANR异常就是由于BroadReceiver产生的,其原因是因为CPU占用达到100%出现的,这个时候就要去看下是自己进程的CPU占用率过高,还是别的程序CPU占用率过高。如果是自己的程序,就要看日志,执行了什么操作导致CPU占用率太高。我这里是同时播放很多gif图的时候出现的。
ANR in net.myvst.v2:xg_service_v3 08-16 17:25:22.802 E/ActivityManager( 3705): Reason: Broadcast of Intent { act=android.net.conn.CONNECTIVITY_CHANGE flg=0x10000010 cmp=net.myvst.v2/com.tencent.android.tpush.XGPushReceiver (has extras) } 08-16 17:25:22.802 E/ActivityManager( 3705): Load: 44.05 / 20.02 / 10.34 08-16 17:25:22.802 E/ActivityManager( 3705): CPU usage from 18010ms to 190ms ago: 08-16 17:25:22.802 E/ActivityManager( 3705): 30% 3851/com.vlctech.tvhome: 23% user + 6.9% kernel / faults: 11118 minor 08-16 17:25:22.802 E/ActivityManager( 3705): 13% 3705/system_server: 11% user + 1.8% kernel / faults: 1450 minor 08-16 17:25:22.802 E/ActivityManager( 3705): 5.7% 4567/com.ktcp.video:push: 4.2% user + 1.5% kernel / faults: 3578 minor 08-16 17:25:22.802 E/ActivityManager( 3705): 3.9% 4662/net.myvst.v2: 3% user + 0.8% kernel / faults: 3531 minor 08-16 17:25:22.802 E/ActivityManager( 3705): 2.5% 74/surfaceflinger: 1.9% user + 0.6% kernel 08-16 17:25:22.802 E/ActivityManager( 3705): 1.7% 85/adbd: 0.1% user + 1.6% kernel 08-16 17:25:22.802 E/ActivityManager( 3705): 1.2% 4392/com.togic.livevideo: 1.2% user + 0% kernel / faults: 64 minor 08-16 17:25:22.802 E/ActivityManager( 3705): 1.2% 4642/com.moretv.android: 1.1% user + 0% kernel / faults: 672 minor 08-16 17:25:22.802 E/ActivityManager( 3705): 0.4% 3677/mediaserver: 0.3% user + 0.1% kernel / faults: 343 minor 08-16 17:25:22.802 E/ActivityManager( 3705): 0.7% 2277/logcat: 0.1% user + 0.6% kernel 08-16 17:25:22.802 E/ActivityManager( 3705): 0.7% 4327/com.dianshijia.newlive: 0.1% user + 0.6% kernel 08-16 17:25:22.802 E/ActivityManager( 3705): 0.6% 4677/net.myvst.v2: 0% user + 0.6% kernel / faults: 389 minor 08-16 17:25:22.802 E/ActivityManager( 3705): 0% 73/debuggerd: 0% user + 0% kernel / faults: 4 minor 08-16 17:25:22.802 E/ActivityManager( 3705): 0.2% 5/events/0: 0% user + 0.2% kernel 08-16 17:25:22.802 E/ActivityManager( 3705): 0.2% 3825/com.amlogic.inputmethod.remote: 0.1% user + 0.1% kernel / faults: 41 minor 08-16 17:25:22.802 E/ActivityManager( 3705): 0.2% 62/yaffs-bg-1: 0% user + 0.2% kernel 08-16 17:25:22.802 E/ActivityManager( 3705): 0.2% 3682/zygote: 0% user + 0.1% kernel / faults: 330 minor 08-16 17:25:22.802 E/ActivityManager( 3705): 0.2% 3954/com.wukongtv.wkhelper: 0.2% user + 0% kernel / faults: 48 minor 08-16 17:25:22.802 E/ActivityManager( 3705): 0.2% 4054/com.kehwin: 0.2% user + 0% kernel / faults: 66 minor 08-16 17:25:22.802 E/ActivityManager( 3705): 0.1% 59/mali/0: 0% user + 0.1% kernel 08-16 17:25:22.802 E/ActivityManager( 3705): 0.1% 3678/netd: 0.1% user + 0% kernel / faults: 153 minor 08-16 17:25:22.802 E/ActivityManager( 3705): 0.1% 10/sync_supers: 0% user + 0.1% kernel 08-16 17:25:22.802 E/ActivityManager( 3705): 0.1% 50/kthread_di: 0% user + 0.1% kernel 08-16 17:25:22.802 E/ActivityManager( 3705): +0% 4701/chmod: 0% user + 0% kernel 08-16 17:25:22.802 E/ActivityManager( 3705): +0% 4707/com.dangbeimarket: 0% user + 0% kernel 08-16 17:25:22.802 E/ActivityManager( 3705): +0% 4729/com.dangbeimarket:bdservice_v1: 0% user + 0% kernel 08-16 17:25:22.802 E/ActivityManager( 3705): +0% 4751/com.dangbeimarket:dangbei_web: 0% user + 0% kernel 08-16 17:25:22.802 E/ActivityManager( 3705): +0% 4760/com.dangbeimarket:MonitorService: 0% user + 0% kernel 08-16 17:25:22.802 E/ActivityManager( 3705): +0% 4769/com.dangbeimarket:appuninstallMonitor: 0% user + 0% kernel 08-16 17:25:22.802 E/ActivityManager( 3705): +0% 4830/com.vlctech.upgradeservice: 0% user + 0% kernel 08-16 17:25:22.802 E/ActivityManager( 3705): +0% 4854/net.myvst.v2:xg_service_v3: 0% user + 0% kernel 08-16 17:25:22.802 E/ActivityManager( 3705): +0% 4884/net.myvst.v2:xg_service_v3: 0% user + 0% kernel 08-16 17:25:22.802 E/ActivityManager( 3705): +0% 4915/cat: 0% user + 0% kernel 08-16 17:25:22.802 E/ActivityManager( 3705): +0% 4916/cat: 0% user + 0% kernel 08-16 17:25:22.802 E/ActivityManager( 3705): 100% TOTAL: 76% user + 22% kernel + 0.4% irq + 0.3% softirq
OOM:当应用占用的内存超过了系统可以给应用分配的最大内存时,就会出现OOM。通常在decode Bitmap对象、在xml文件中inflate大的背景图片、内存泄露时,应用很容易就会出现OOM。
例如:下面这个OOM就是在decode图片时出现的。解决这种异常可以采用更小的采样率或者直接更换小的图片。
08-17 20:35:38.311 D/dalvikvm( 5665): GC_BEFORE_OOM freed <1K, 17% free 54496K/65351K, paused 293ms, total 293ms 08-17 20:35:38.311 E/dalvikvm-heap( 5665): Out of memory on a 3686416-byte allocation. 08-17 20:35:38.311 I/dalvikvm( 5665): "main" prio=5 tid=1 RUNNABLE 08-17 20:35:38.311 I/dalvikvm( 5665): | group="main" sCount=0 dsCount=0 obj=0x40d6f6a0 self=0x400460b0 08-17 20:35:38.311 I/dalvikvm( 5665): | sysTid=5665 nice=0 sched=0/0 cgrp=apps handle=1074503472 08-17 20:35:38.311 I/dalvikvm( 5665): | schedstat=( 0 0 0 ) utm=19045 stm=3308 core=1 08-17 20:35:38.311 I/dalvikvm( 5665): at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) 08-17 20:35:38.311 I/dalvikvm( 5665): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:500) 08-17 20:35:38.311 I/dalvikvm( 5665): at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:353) 08-17 20:35:38.311 I/dalvikvm( 5665): at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:376)
相关文章推荐
- Android使用百度地图出现闪退及定位时显示蓝屏问题的解决方法
- unrecognized selector sent to instance 问题快速定位的方法
- UNRECOGNIZED SELECTOR SENT TO INSTANCE 问题快速定位的方法
- UNRECOGNIZED SELECTOR SENT TO INSTANCE 问题快速定位的方法
- android开发 app闪退后fragment重叠bug解决方法,推荐使用第二种方法,完美解决问题
- Android使用WebView无法定位问题的解决方法
- android 简单实用的Log打印类封装,助你快速定位问题
- UNRECOGNIZED SELECTOR SENT TO INSTANCE 问题快速定位的方法
- Android中利用icodetools工具快速定位App破解中关键点方法
- UNRECOGNIZED SELECTOR SENT TO INSTANCE 问题快速定位的方法
- [已解决]Delphi XE10 Android 程序引用百度定位Jar包后, 某些手机上闪退的问题
- 常用JS调试工具使用方法,帮你快速定位问题(Firebug+ IE“开发人员工具”)
- DEBUG快速定位问题的方法
- Android 5.1 WebView内存泄漏问题及快速解决方法
- [置顶] android开发 app闪退后fragment重叠bug解决方法,推荐使用第二种方法,完美解决问题
- android 简单实用的Log打印类封装,助你快速定位问题
- android 代码混淆导致问题,快速定位
- T4 模板的调试方法,方便大家遇到问题自己快速定位和优化
- UNRECOGNIZED SELECTOR SENT TO INSTANCE 问题快速定位的方法
- Android定位问题方法