ANR 笔记

来源:互联网 发布:知乎 卡尔 编辑:程序博客网 时间:2024/06/13 16:55



发生ANR进程的call stack:Blocked、Native、Waiting


Blocker类型:

主线程卡死在dex方法中


"main" prio=5 tid=1 Blocked  | group="main" sCount=1 dsCount=0 obj=0x767023a0 self=0x76e1896a00  | sysTid=13942 nice=0 cgrp=default sched=0/0 handle=0x76e5dfda98  | state=S schedstat=( 563799321 432986759 908 ) utm=40 stm=16 core=2 HZ=100  | stack=0x7fd752b000-0x7fd752d000 stackSize=8MB  | held mutexes=  at android.app.ApplicationLoaders.getClassLoader(ApplicationLoaders.java:40)  - waiting to lock <0x0ddea182> (a android.util.ArrayMap) held by thread 24  at android.app.LoadedApk.createOrUpdateClassLoaderLocked(LoadedApk.java:525)
  "Thread-12" prio=10 tid=24 Native  | group="main" sCount=1 dsCount=0 obj=0x12e45160 self=0x76d58c3e00  | sysTid=14000 nice=10 cgrp=bg_non_interactive sched=0/0 handle=0x76c6710450  | state=R schedstat=( 33192160 6156940547 327 ) utm=0 stm=3 core=3 HZ=100  | stack=0x76c660e000-0x76c6610000 stackSize=1037KB  | held mutexes= "OatFile manager lock"(shared held)  at dalvik.system.DexFile.openDexFileNative(Native method)  at dalvik.system.DexFile.openDexFile(DexFile.java:373)  at dalvik.system.DexFile.<init>(DexFile.java:113)  at dalvik.system.DexFile.<init>(DexFile.java:78)  at dalvik.system.DexPathList.loadDexFile(DexPathList.java:359)  at dalvik.system.DexPathList.makeElements(DexPathList.java:323)  at dalvik.system.DexPathList.makeDexElements(DexPathList.java:263)  at dalvik.system.DexPathList.<init>(DexPathList.java:126)  at dalvik.system.BaseDexClassLoader.<init>(BaseDexClassLoader.java:48)
Native类型:
"main" prio=5 tid=1 Native  | group="main" sCount=1 dsCount=0 obj=0x75a905c8 self=0xe9185400  | sysTid=28683 nice=0 cgrp=default sched=0/0 handle=0xec64a534  | state=D schedstat=( 192877927 154411301 311 ) utm=9 stm=10 core=0 HZ=100  | stack=0xff634000-0xff636000 stackSize=8MB  | held mutexes=  at java.io.FileDescriptor.sync(Native method)  at android.os.FileUtils.sync(FileUtils.java:181)  at android.app.SharedPreferencesImpl.writeToFile(SharedPreferencesImpl.java:601)  at android.app.SharedPreferencesImpl.-wrap2(SharedPreferencesImpl.java:-1)  at android.app.SharedPreferencesImpl$2.run(SharedPreferencesImpl.java:515)  - locked <0x09c69197> (a java.lang.Object)  at android.app.SharedPreferencesImpl.enqueueDiskWrite(SharedPreferencesImpl.java:536)  at android.app.SharedPreferencesImpl.-wrap0(SharedPreferencesImpl.java:-1)  at android.app.SharedPreferencesImpl$EditorImpl.commit(SharedPreferencesImpl.java:458)  at com.gameloft.android.ANMP.GloftA8HM.GLUtils.SUtils.setPreference(SUtils.java:612)  at com.gameloft.android.ANMP.GloftA8HM.GLUtils.SUtils.setPreference(SUtils.java:587)  at com.gameloft.android.ANMP.GloftA8HM.installer.GameInstaller.onCreate(GameInstaller.java:3806)  at android.app.Activity.performCreate(Activity.java:6687)  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2677)  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2789)  at android.app.ActivityThread.-wrap12(ActivityThread.java:-1)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1527)  at android.os.Handler.dispatchMessage(Handler.java:110)  at android.os.Looper.loop(Looper.java:203)  at android.app.ActivityThread.main(ActivityThread.java:6251)  at java.lang.reflect.Method.invoke!(Native method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1073)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:934)  ...  "pool-1-thread-1" prio=5 tid=12 Native  | group="main" sCount=1 dsCount=0 obj=0x12c699d0 self=0xe0cc0000  | sysTid=28867 nice=0 cgrp=default sched=0/0 handle=0xcf2b2920  | state=D schedstat=( 3659154 13360461 10 ) utm=0 stm=0 core=5 HZ=100  | stack=0xcf1b0000-0xcf1b2000 stackSize=1038KB  | held mutexes=  kernel: __switch_to+0x74/0x8c  kernel: jbd2_log_wait_commit+0x84/0xf8  kernel: jbd2_complete_transaction+0x88/0xb0  kernel: ext4_sync_file+0x1f0/0x368  kernel: SyS_fsync+0x40/0x74  kernel: el0_svc_naked+0x24/0x28  native: #00 pc 00049dd8  /system/lib/libc.so (fsync+12)  native: #01 pc 00002ff7  /system/lib/libopenjdkjvm.so (JVM_Sync+6)  native: #02 pc 00013377  /system/lib/libopenjdk.so (FileDescriptor_sync+22)  native: #03 pc 00024bcf  /system/framework/arm/boot.oat (Java_java_io_FileDescriptor_sync__+74)  at java.io.FileDescriptor.sync(Native method)  at android.os.FileUtils.sync(FileUtils.java:181)  at android.app.SharedPreferencesImpl.writeToFile(SharedPreferencesImpl.java:601)  at android.app.SharedPreferencesImpl.-wrap2(SharedPreferencesImpl.java:-1)  at android.app.SharedPreferencesImpl$2.run(SharedPreferencesImpl.java:515)  - locked <0x06fc9d08> (a java.lang.Object)  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)  at java.lang.Thread.run(Thread.java:761)


当前主线程进行SharedPreferencesImpl.writeToFile 读写数据的时候卡住,
这和当时的手机的emmc性能有关,此问题还需要apk内部进行优化,apk进行大量数据库操作的时候进行优化,
Waiting类型
"main" prio=5 tid=1 Waiting  | group="main" sCount=1 dsCount=0 obj=0x746f15c8 self=0xe7685400  | sysTid=30121 nice=0 cgrp=default sched=0/0 handle=0xeab32534  | state=S schedstat=( 992680488 68247536 426 ) utm=16 stm=83 core=4 HZ=100  | stack=0xff0f3000-0xff0f5000 stackSize=8MB  | held mutexes=  at java.lang.Object.wait!(Native method)  - waiting on <0x089ed941> (a byte[])  at com.uc.crashsdk.f.c(ProGuard:1213)  - locked <0x089ed941> (a byte[])  at com.uc.crashsdk.f.a(ProGuard:1320)  at com.uc.crashsdk.export.CrashApi.generateCustomLog(ProGuard:303)  at com.uc.browser.CrashSDKWrapper.a(ProGuard:1098)  at com.uc.browser.CrashSDKWrapper.a(ProGuard:1145)  at com.uc.browser.bp.a(ProGuard:131)  at com.uc.browser.bp.c(ProGuard:108)  at com.uc.browser.bp.b(ProGuard:73)  at com.uc.browser.bp.a(ProGuard:55)  at com.uc.browser.g.c.c(ProGuard:123)  at com.uc.browser.g.c.a(ProGuard:233)  at com.uc.browser.f.a(ProGuard:256)  at com.uc.browser.e.c(ProGuard:269)  at com.uc.browser.d.a(ProGuard:115)  at com.uc.browser.a.a(ProGuard:339)  at com.uc.browser.bt.a(ProGuard:123)  at com.uc.application.searchIntl.a.a(ProGuard:69)  at com.uc.application.searchIntl.SearchActivity.onCreate(ProGuard:84)  at android.app.Activity.performCreate(Activity.java:6687)  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2677)  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2789)  at android.app.ActivityThread.-wrap12(ActivityThread.java:-1)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1527)  at android.os.Handler.dispatchMessage(Handler.java:110)  at android.os.Looper.loop(Looper.java:203)  at android.app.ActivityThread.main(ActivityThread.java:6251)  at java.lang.reflect.Method.invoke!(Native method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1073)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:934)  ..."CrashSDKBkgdHandler" prio=5 tid=16 Native  | group="main" sCount=1 dsCount=0 obj=0x12d62550 self=0xdbb66a00  | sysTid=30142 nice=10 cgrp=bg_non_interactive sched=0/0 handle=0xcd373920  | state=S schedstat=( 30972077 556384 30 ) utm=3 stm=0 core=1 HZ=100  | stack=0xcd271000-0xcd273000 stackSize=1038KB  | held mutexes=  kernel: __switch_to+0x74/0x8c  kernel: unix_stream_recvmsg+0x4b4/0x6f0  kernel: sock_aio_read.part.11+0xe4/0x108  kernel: sock_aio_read+0x18/0x30  kernel: do_sync_read+0x70/0xa8  kernel: vfs_read+0xfc/0x19c  kernel: SyS_read+0x44/0xa0  kernel: el0_svc_naked+0x24/0x28  native: #00 pc 0004a5d8  /system/lib/libc.so (read+8)  native: #01 pc 0004fb29  /system/lib/libc.so (__sread+20)  native: #02 pc 000527d5  /system/lib/libc.so (__srefill+180)  native: #03 pc 000526c5  /system/lib/libc.so (fread+168)  native: #04 pc 00025cbf  /system/lib/libc.so (android_getaddrinfofornetcontext+1870)  native: #05 pc 0002554d  /system/lib/libc.so (android_getaddrinfofornet+44)  native: #06 pc 0001895d  /system/lib/libjavacore.so (???)  native: #07 pc 001fd6f3  /system/framework/arm/boot-core-libart.oat (Java_libcore_io_Posix_android_1getaddrinfo__Ljava_lang_String_2Landroid_system_StructAddrinfo_2I+126)  at libcore.io.Posix.android_getaddrinfo(Native method)  at libcore.io.ForwardingOs.android_getaddrinfo(ForwardingOs.java:55)  at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:106)  at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:74)  at java.net.InetAddress.getAllByName(InetAddress.java:757)  at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:147)  at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:169)  at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:124)  at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:366)  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:601)  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:542)  at com.uc.crashsdk.l.a(ProGuard:188)  at com.uc.crashsdk.l.a(ProGuard:109)  at com.uc.crashsdk.l.a(ProGuard:86)  at com.uc.crashsdk.f$a.run(ProGuard:1138)  at com.uc.crashsdk.b.i.run(ProGuard:57)  at android.os.Handler.handleCallback(Handler.java:836)  at android.os.Handler.dispatchMessage(Handler.java:103)  at android.os.Looper.loop(Looper.java:203)  at android.os.HandlerThread.run(HandlerThread.java:61)


主线程在进行com.uc.browser.CrashSDKWrapper处于wait状态,在等待子线程操作,
查看子线程CrashSDKBkgdHandler可以知道一直在发生http网络数据传输,
由此可知主线程等待子线程,而子线程由于网络原因一直被卡住,导致主线程触发ANR事件
发生JE堆栈信息
三方应用没有添加读外部存储的权限,导致报错
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xvideostudio.videoeditor/com.xvideostudio.videoeditor.activity.TrimCompressViewActivity}: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/video/media from pid=24998, uid=10201 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2724)at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2789)at android.app.ActivityThread.-wrap12(ActivityThread.java)at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1527)at android.os.Handler.dispatchMessage(Handler.java:110)