内存信息
adb shell dumpsys meminfo com.test.launcher > d:/dumpsys_mem.txt
** MEMINFO in pid 5560 [com.test.wallpaper] ** Pss Private Private Swap Rss Heap Heap Heap Total Dirty Clean Dirty Total Size Alloc Free ------ ------ ------ ------ ------ ------ ------ ------ Native Heap 53378 53284 0 0 56932 91708 55578 29736 Dalvik Heap 78945 78328 0 0 102588 102485 77909 24576 Dalvik Other 8741 7016 0 0 28276 Stack 2108 2108 0 0 2124 Ashmem 177 0 0 0 916 Other dev 128 0 124 0 492 .so mmap 4777 592 88 0 60192 .jar mmap 1065 0 0 0 34904 .apk mmap 18763 20 18016 0 20916 .ttf mmap 182 0 0 0 1224 .dex mmap 380 0 380 0 380 Other mmap 10959 6032 4848 0 12472 Unknown 715 680 0 0 1560 TOTAL 180318 148060 23456 0 322976 194193 133487 54312
Pss是进程实际占用的物理内存大小,Rss是进程在物理内存中实际映射的总大小(包括代码段(.so/.jar)、缓存页等非匿名内存)
另外Offscreen Layers:下如果出现多个无法回收的surfaceview表示有泄露,可以多次进入退出测试,在达到三四个时系统会自动回收一次,如果没回收需要处理泄露问题

heapdump.hprof
可以直接拖进AS中
当碰到 ActivityTaskManager: START u0 {flg=0x10000000 cmp=com.test/com.test.activity.TestActivity} from uid 1000 pid -1
发现pid等于-1,由于是taskview启动,所以需要进一步查找pid信息
Line 130094: 09-08 11:47:36.379 1247 3323 E ActivityTaskManager: Starting window is not removed, kill it : com.zeekr.carlauncher3d
Line 130740: 09-08 11:47:36.503 1247 3323 I ActivityManager: Killing 3253:com.test/1000 (adj 0): stop com.test due to from pid 1247
Line 130741: 09-08 11:47:36.503 1247 3323 I am_kill : [0,3253,com.test,0,stop com.test due to from pid 1247]

很显然是system_server进程杀死的
不排除人为(使用adb force-stop),adb 执行命令时 的 pid 是0 或者null,所以这里排除adb命令,是系统层调用干掉的
当系统进入高负载状态,可能触发系统保护机制,进程被杀后内存立马恢复
如果pid是其它进程,就需要排查该进程原因,是否自己异常导致的把其它进程也给同时结束了
比如自己进程crash了,可以看到pid就是自己杀死的
cpu暂用可以直接使用命令查看
adb shell top -p 8971 -u u0_a179
问题:monkey测试18H,test.screensaver发生了18次anr
首先从anr in|am_anr|anr of中找到相关时间点,可以得知anr的发生时间

然后根据eventTime找到起始节点,问题是主线程(pid=19698)触摸事件无响应导致

看到触发点在42秒,Waited 5000ms,从37秒开始排查应用进程下有无异常
整体看下来,只有一个图片加载的警告,只是警告理论上可以排除,但是不能保证没有关系

继续跟进,找到下面日志,可以看出,该警告是加载png图片时抛出
03-06 09:09:38.239 19698 20294 V DiskLruCacheWrapper: Get: Obtained: 1d28ba4768adb441e4bd86b10b4b8e4d68ad885855e5e2c2caceb5685601db36 for for Key: ResourceCacheKey{sourceKey=ObjectKey{object=android.resource://test.screensaver/drawable/mask_right}, signature=com.bumptech.glide.signature.AndroidResourceSignature@17028f, width=600, height=1000, decodedResourceClass=class android.graphics.Bitmap, transformation='com.bumptech.glide.load.resource.bitmap.CenterCrop@dc40790e', options=Options{values={Option{key='com.bumptech.glide.load.resource.bitmap.Downsampler.DownsampleStrategy'}=com.bumptech.glide.load.resource.bitmap.DownsampleStrategy$CenterOutside@7c7c491}}}
03-06 09:09:38.293 19698 20294 V DecodeJob: Retrieved data in 43.594479, load key: EngineKey{model=2131231180, width=600, height=1000, resourceClass=class android.graphics.Bitmap, transcodeClass=class android.graphics.Bitmap, signature=com.bumptech.glide.signature.AndroidResourceSignature@17028f, hashCode=1881417398, transformations={class android.graphics.Bitmap=com.bumptech.glide.load.resource.bitmap.CenterCrop@dc40790e, class android.graphics.drawable.Drawable=com.bumptech.glide.load.resource.bitmap.DrawableTransformation@dc40790e, class com.bumptech.glide.load.resource.gif.GifDrawable=com.bumptech.glide.load.resource.gif.GifDrawableTransformation@dc40790e, class android.graphics.drawable.BitmapDrawable=com.bumptech.glide.load.resource.bitmap.DrawableTransformation@dc40790e}, options=Options{values={Option{key='com.bumptech.glide.load.resource.bitmap.Downsampler.DownsampleStrategy'}=com.bumptech.glide.load.resource.bitmap.DownsampleStrategy$CenterOutside@7c7c491}}}, data: java.nio.DirectByteBuffer[pos=0 lim=134580 cap=134580], cache key: ObjectKey{object=android.resource://test.screensaver/drawable/mask_right}, fetcher: com.bumptech.glide.load.model.ByteBufferFileLoader$ByteBufferFetcher@d4638af, thread: glide-disk-cache-thread-0
得知是本地资源图片,然后看具体代码,发现是使用glide加载,主线程无耗时操作,基本可以排除原因,接下来看其它信息

主线程中看到,有四个重要日志,首先排除第一条,只是一个加载提示,接着是两个接口方法打印,这个接口是跨进程调用,所以存在anr的风险
如果跨进程调用api,对方反应很慢,会导致主线程卡住,从代码中得知,该方法是onCreate时调用,并且三方接口已经打印了log反馈,说明正常响应,可以排除
接下来剩下最后一个syncPreviewFontColor,看代码,此方法无耗时操作,只是简单的监听
@Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = super.onCreateView(inflater, container, savedInstanceState); syncPreviewFontColor(); return view; } fun syncPreviewFontColor(screen: ScreenPreviewType) { context.display?.displayId?.let { syncKey?.let { LiveEventBus.get<String>(it).removeObserver(observer) } syncKey = FontColorPickManager.getPreviewObserverId(it, screen) } LogUtil.d(TAG, "syncPreviewFontColor syncKey=$syncKey") observerSyncState() } private fun observerSyncState() { if (!isAttachedToWindow) { return } syncKey?.let { LiveEventBus.get<String>(it).removeObserver(observer) LiveEventBus.get<String>(it).observeStickyForever(observer) } }
因为是在BaseFragment中的onCreateView方法打印,所以进一步排查,create还执行了什么方法
最后找到是在继承BaseFragment的类中onCreateView下执行了binding.backgroundImg.setImageDrawable(ContextCompat.getDrawable(mContext, R.drawable.icon_preview_bg_exc))
该图片3200x2000,会导致主线程卡顿
解决方案可以预加载,或者glide异步
【台架】【双屏】前排MTBF测试test.screensaver出现4次anr
从anr文件中发现主线程相关堆栈
Subject: Input dispatching timed out (screensaver-input-monitor2 (server) is not responding. Waited 5000ms for MotionEvent(deviceId=3, eventTime=21745533833000, source=0x00001002, displayId=2, action=DOWN, actionButton=0x00000000, flags=0x00000000, metaState=0x00200000, buttonState=0x00000000, classification=NONE, edgeFlags=0x00000000, xPrecision=1.0, yPrecision=1.0, xCursorPosition=nan, yCursorPosition=nan, pointers=[0: (1551.0, 1014.0)]), policyFlags=0x62000000) "main" prio=5 tid=1 TimedWaiting | group="main" sCount=1 ucsCount=0 flags=1 obj=0x71f530b8 self=0xb400007ad29fd7b0 | sysTid=3657 nice=-10 cgrp=foreground sched=0/0 handle=0x7c1e6804f8 | state=S schedstat=( 90562249445 461616992973 844688 ) utm=5729 stm=3326 core=0 HZ=100 | stack=0x7fee846000-0x7fee848000 stackSize=8188KB | held mutexes= at java.lang.Object.wait(Native method) - waiting on <0x09cb65b2> (a com.google.android.exoplayer2.PlayerMessage) at java.lang.Object.wait(Object.java:442) at com.google.android.exoplayer2.PlayerMessage.blockUntilDelivered(PlayerMessage.java:359) - locked <0x09cb65b2> (a com.google.android.exoplayer2.PlayerMessage) at com.google.android.exoplayer2.ExoPlayerImpl.setVideoOutputInternal(ExoPlayerImpl.java:2545) at com.google.android.exoplayer2.ExoPlayerImpl.access$1700(ExoPlayerImpl.java:109) at com.google.android.exoplayer2.ExoPlayerImpl$ComponentListener.surfaceDestroyed(ExoPlayerImpl.java:2959) at android.view.SurfaceView.notifySurfaceDestroyed(SurfaceView.java:1981) at android.view.SurfaceView.updateSurface(SurfaceView.java:1157) at android.view.SurfaceView.onWindowVisibilityChanged(SurfaceView.java:327) at android.view.View.dispatchWindowVisibilityChanged(View.java:14988) at android.view.ViewGroup.dispatchWindowVisibilityChanged(ViewGroup.java:1619) at android.view.ViewGroup.dispatchWindowVisibilityChanged(ViewGroup.java:1619) at android.view.ViewGroup.dispatchWindowVisibilityChanged(ViewGroup.java:1619) ... repeated 9 times at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2696) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2184) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8826) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1037) at android.view.Choreographer.doCallbacks(Choreographer.java:845) at android.view.Choreographer.doFrame(Choreographer.java:780) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1022) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7870) at java.lang.reflect.Method.invoke(Native method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
从堆栈看出,是视频播放器的blockUntilDelivered方法导致anr,在从android log中确认关键信息
Line 145895: 03-10 20:33:44.491 3657 3657 V SurfaceControl: hide sc=Surface(name=Surface(name=3fa0504 InputMethod)/@0xf48d22 - animation-leash of insets_animation)/@0x4d4fce4, mNativeObject: 0xb400007a12a4a8f0 Line 148454: 03-10 20:33:45.015 1672 1802 I wm_destroy_activity: [0,268338759,1277,test.screensaver/.activity.PreviewAllActivity,finish-imm:idle] Line 148541: 03-10 20:33:45.027 3657 3657 D SurfaceControl: transaction mNativeObject: 0xb400007a12ad33f0 call setRelativeLayer sc: Surface(name=Background for SurfaceView[test.screensaver/test.screensaver.activity.PreviewAllActivity])/@0x9e44a99, relativeTo: Surface(name=test.screensaver/test.screensaver.activity.PreviewAllActivity)/@0x44915e, z: -2147483648 Line 148542: 03-10 20:33:45.027 3657 3657 D SurfaceControl: transaction mNativeObject: 0xb400007a12ad33f0 call setRelativeLayer sc: Surface(name=SurfaceView[test.screensaver/test.screensaver.activity.PreviewAllActivity])/@0x8ea420c, relativeTo: Surface(name=test.screensaver/test.screensaver.activity.PreviewAllActivity)/@0x44915e, z: -2 Line 148543: 03-10 20:33:45.027 3657 3657 V SurfaceControl: show sc=Surface(name=SurfaceView[test.screensaver/test.screensaver.activity.PreviewAllActivity])/@0x8ea420c, transaction nativeObject: 0xb400007a12a32b90 Line 148544: 03-10 20:33:45.027 3657 3657 V SurfaceControl: show sc=Surface(name=Background for SurfaceView[test.screensaver/test.screensaver.activity.PreviewAllActivity])/@0x9e44a99, transaction nativeObject: 0xb400007a12ad33f0 Line 171136: 03-10 20:33:45.911 3657 3657 D SurfaceControl: transaction mNativeObject: 0xb400007a12abe030 call setRelativeLayer sc: Surface(name=Background for SurfaceView[test.screensaver/test.screensaver.activity.PreviewAllActivity])/@0xb44656a, relativeTo: Surface(name=test.screensaver/test.screensaver.activity.PreviewAllActivity)/@0x44915e, z: -2147483648 Line 171145: 03-10 20:33:45.911 3657 3657 D SurfaceControl: transaction mNativeObject: 0xb400007a12abe030 call setRelativeLayer sc: Surface(name=SurfaceView[test.screensaver/test.screensaver.activity.PreviewAllActivity])/@0xd01aa5b, relativeTo: Surface(name=test.screensaver/test.screensaver.activity.PreviewAllActivity)/@0x44915e, z: -2 Line 171150: 03-10 20:33:45.911 3657 3657 V SurfaceControl: show sc=Surface(name=SurfaceView[test.screensaver/test.screensaver.activity.PreviewAllActivity])/@0xd01aa5b, transaction nativeObject: 0xb400007a12a309d0 Line 171157: 03-10 20:33:45.911 3657 3657 V SurfaceControl: show sc=Surface(name=Background for SurfaceView[test.screensaver/test.screensaver.activity.PreviewAllActivity])/@0xb44656a, transaction nativeObject: 0xb400007a12abe030 Line 189154: 03-10 20:33:46.884 3657 3657 D SurfaceControl: transaction mNativeObject: 0xb400007a12acf730 call setRelativeLayer sc: Surface(name=Background for SurfaceView[test.screensaver/test.screensaver.activity.PreviewAllActivity])/@0xd9bb3d1, relativeTo: Surface(name=test.screensaver/test.screensaver.activity.PreviewAllActivity)/@0x44915e, z: -2147483648 Line 189156: 03-10 20:33:46.884 3657 3657 D SurfaceControl: transaction mNativeObject: 0xb400007a12acf730 call setRelativeLayer sc: Surface(name=SurfaceView[test.screensaver/test.screensaver.activity.PreviewAllActivity])/@0xbb6e36, relativeTo: Surface(name=test.screensaver/test.screensaver.activity.PreviewAllActivity)/@0x44915e, z: -2 Line 189157: 03-10 20:33:46.884 3657 3657 V SurfaceControl: show sc=Surface(name=SurfaceView[test.screensaver/test.screensaver.activity.PreviewAllActivity])/@0xbb6e36, transaction nativeObject: 0xb400007a12a42e50 Line 189158: 03-10 20:33:46.884 3657 3657 V SurfaceControl: show sc=Surface(name=Background for SurfaceView[test.screensaver/test.screensaver.activity.PreviewAllActivity])/@0xd9bb3d1, transaction nativeObject: 0xb400007a12acf730 Line 232548: 03-10 20:33:48.887 3657 3657 I [testScreenSaver]_20260302.f5bb920f_20260302_PlayerManager: onPlayerErrorChanged error -->com.google.android.exoplayer2.ExoPlaybackException: Unexpected runtime error Line 232549: 03-10 20:33:48.887 3657 3657 I [testScreenSaver]_20260302.f5bb920f_20260302_PreImage: onPlayerErrorChanged error -->com.google.android.exoplayer2.ExoPlaybackException: Unexpected runtime error Line 232550: 03-10 20:33:48.887 3657 3657 I [testScreenSaver]_20260302.f5bb920f_20260302_PlayerManager: onPlayerError error -->com.google.android.exoplayer2.ExoPlaybackException: Unexpected runtime error Line 232551: 03-10 20:33:48.887 3657 3657 I [testScreenSaver]_20260302.f5bb920f_20260302_PreImage: onPlayerError error -->com.google.android.exoplayer2.ExoPlaybackException: Unexpected runtime error Line 232552: 03-10 20:33:48.887 3657 3657 I PlayerManager: ReleasePlayer called 13560731 player com.google.android.exoplayer2.ExoPlayerImpl@b3b5f0c Line 232552: 03-10 20:33:48.887 3657 3657 I PlayerManager: ReleasePlayer called 13560731 player com.google.android.exoplayer2.ExoPlayerImpl@b3b5f0c Line 232553: 03-10 20:33:48.887 3657 3657 I ExoPlayerImpl: Release b3b5f0c [ExoPlayerLib/2.18.5] [test_dhu_sa8295, msmnile_gvmq for arm64, Qualcomm, 32] [goog.exo.core, goog.exo.exoplayer, goog.exo.decoder, goog.exo.datasource, goog.exo.extractor] Line 234605: 03-10 20:33:49.007 3657 3657 I PlayerManager: release called size = 4 Line 235516: 03-10 20:33:49.065 3657 3657 D SurfaceControl: transaction mNativeObject: 0xb400007a12a40db0 call setRelativeLayer sc: Surface(name=Background for SurfaceView[test.screensaver/test.screensaver.activity.PreviewAllActivity])/@0xf269137, relativeTo: Surface(name=test.screensaver/test.screensaver.activity.PreviewAllActivity)/@0x44915e, z: -2147483648 Line 235517: 03-10 20:33:49.065 3657 3657 D SurfaceControl: transaction mNativeObject: 0xb400007a12a40db0 call setRelativeLayer sc: Surface(name=SurfaceView[test.screensaver/test.screensaver.activity.PreviewAllActivity])/@0xb34c6a4, relativeTo: Surface(name=test.screensaver/test.screensaver.activity.PreviewAllActivity)/@0x44915e, z: -2 Line 235518: 03-10 20:33:49.066 3657 3657 V SurfaceControl: show sc=Surface(name=SurfaceView[test.screensaver/test.screensaver.activity.PreviewAllActivity])/@0xb34c6a4, transaction nativeObject: 0xb400007a12a92b30 Line 235519: 03-10 20:33:49.066 3657 3657 V SurfaceControl: show sc=Surface(name=Background for SurfaceView[test.screensaver/test.screensaver.activity.PreviewAllActivity])/@0xf269137, transaction nativeObject: 0xb400007a12a40db0 Line 252744: 03-10 20:33:49.962 3657 3657 D SurfaceControl: transaction mNativeObject: 0xb400007a12a48df0 call setRelativeLayer sc: Surface(name=Background for SurfaceView[test.screensaver/test.screensaver.activity.PreviewAllActivity])/@0xd6bc0d, relativeTo: Surface(name=test.screensaver/test.screensaver.activity.PreviewAllActivity)/@0x44915e, z: -2147483648 Line 252745: 03-10 20:33:49.962 3657 3657 D SurfaceControl: transaction mNativeObject: 0xb400007a12a48df0 call setRelativeLayer sc: Surface(name=SurfaceView[test.screensaver/test.screensaver.activity.PreviewAllActivity])/@0x7c837c2, relativeTo: Surface(name=test.screensaver/test.screensaver.activity.PreviewAllActivity)/@0x44915e, z: -2 Line 252746: 03-10 20:33:49.962 3657 3657 V SurfaceControl: show sc=Surface(name=SurfaceView[test.screensaver/test.screensaver.activity.PreviewAllActivity])/@0x7c837c2, transaction nativeObject: 0xb400007a12a73f90 Line 252747: 03-10 20:33:49.963 3657 3657 V SurfaceControl: show sc=Surface(name=Background for SurfaceView[test.screensaver/test.screensaver.activity.PreviewAllActivity])/@0xd6bc0d, transaction nativeObject: 0xb400007a12a48df0 Line 254237: 03-10 20:33:50.059 1672 1988 I WindowManager: ANR in gesture monitor owned by pid:3657. Reason: screensaver-input-monitor2 (server) is not responding. Waited 5000ms for MotionEvent(deviceId=3, eventTime=21745533833000, source=0x00001002, displayId=2, action=DOWN, actionButton=0x00000000, flags=0x00000000, metaState=0x00200000, buttonState=0x00000000, classification=NONE, edgeFlags=0x00000000, xPrecision=1.0, yPrecision=1.0, xCursorPosition=nan, yCursorPosition=nan, pointers=[0: (1551.0, 1014.0)]), policyFlags=0x62000000 Line 256033: 03-10 20:33:50.184 1672 1988 I WindowManager: ANR in Window{839eaa u0 test.screensaver/test.screensaver.activity.PsdMainActivity}. Reason:839eaa test.screensaver/test.screensaver.activity.PsdMainActivity (server) is not responding. Waited 5135ms for MotionEvent(deviceId=3, eventTime=21745533833000, source=0x00001002, displayId=2, action=DOWN, actionButton=0x00000000, flags=0x00000000, metaState=0x00200000, buttonState=0x00000000, classification=NONE, edgeFlags=0x00000000, xPrecision=1.0, yPrecision=1.0, xCursorPosition=nan, yCursorPosition=nan, pointers=[0: (1551.0, 1014.0)]), policyFlags=0x62000000
看到destroy时打印了ReleasePlayer called,执行了clear方法
fun releasePlayer(surfaceView: SurfaceView, listener: Listener) { val key = System.identityHashCode(surfaceView).toString() val player = playerMutableMap[key] Log.i(TAG, "ReleasePlayer called $key player $player") if (player != null) { player.stop() player.clearVideoSurfaceView(surfaceView) player.removeListener(innerListener) player.removeListener(listener) player.release() playerMutableMap.remove(key) Log.i(TAG, "release called size = ${playerMutableMap.size}") } }
可以看到执行链路,clearVideoSurfaceView方法最终会执行到blockUntilDelivered
private void setVideoOutputInternal(@Nullable Object videoOutput) { // Note: We don't turn this method into a no-op if the output is being replaced with itself so // as to ensure onRenderedFirstFrame callbacks are still called in this case. List<PlayerMessage> messages = new ArrayList<>(); for (Renderer renderer : renderers) { if (renderer.getTrackType() == TRACK_TYPE_VIDEO) { messages.add( createMessageInternal(renderer) .setType(MSG_SET_VIDEO_OUTPUT) .setPayload(videoOutput) .send()); } } boolean messageDeliveryTimedOut = false; if (this.videoOutput != null && this.videoOutput != videoOutput) { // We're replacing an output. Block to ensure that this output will not be accessed by the // renderers after this method returns. try { for (PlayerMessage message : messages) { message.blockUntilDelivered(detachSurfaceTimeoutMs); } } catch (InterruptedException e) { Thread.currentThread().interrupt(); } catch (TimeoutException e) { messageDeliveryTimedOut = true; } if (this.videoOutput == ownedSurface) { // We're replacing a surface that we are responsible for releasing. ownedSurface.release(); ownedSurface = null; } } this.videoOutput = videoOutput; if (messageDeliveryTimedOut) { stopInternal( /* reset= */ false, ExoPlaybackException.createForUnexpected( new ExoTimeoutException(ExoTimeoutException.TIMEOUT_OPERATION_DETACH_SURFACE), PlaybackException.ERROR_CODE_TIMEOUT)); } }
解决方案,需要优化destroy的耗时操作,clear方法不能放到异步,否则会有内存泄露,需要升级exoplayer sdk版本
Monkey持续运行12小时test.screensaver发生ANR【偶现】
Subject: Input dispatching timed out (Application does not have a focused window)
----- pid 3201 at 2026-05-15 03:59:12.777352973+0800 -----
Cmd line: test.screensaver
"main" prio=5 tid=1 Native
| group="main" sCount=1 ucsCount=0 flags=1 obj=0x71a8c488 self=0xb400006fb0aeebe0
| sysTid=3201 nice=0 cgrp=top-app sched=0/0 handle=0x70fb2284f8
| state=S schedstat=( 580490155839 859821617632 3769177 ) utm=36536 stm=21512 core=7 HZ=100
| stack=0x7fdacde000-0x7fdace0000 stackSize=8188KB
| held mutexes=
native: #00 pc 000000000009e498 /apex/com.android.runtime/lib64/bionic/libc.so (__epoll_pwait+8)
native: #01 pc 0000000000016628 /system/lib64/libutils.so (android::Looper::pollInner(int)+180)
native: #02 pc 000000000001650c /system/lib64/libutils.so (android::Looper::pollOnce(int, int*, int*, void**)+112)
native: #03 pc 0000000000157c48 /system/lib64/libandroid_runtime.so (android::android_os_MessageQueue_nativePollOnce(_JNIEnv*, _jobject*, long, int)+44)
at android.os.MessageQueue.nativePollOnce(Native method)
at android.os.MessageQueue.next(MessageQueue.java:335)
at android.os.Looper.loopOnce(Looper.java:161)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7870)
at java.lang.reflect.Method.invoke(Native method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1008)
可以看到主线程空闲,属于无效trace,在对应android log进一步分析
05-15 03:59:12.309 1666 1828 W InputDispatcher: Waiting because no window has focus but ActivityRecord{5ed73ad u0 test.screen/.activity.PreviewAllActivity t1223} may eventually add a window when it finishes starting up. Will wait for 5000ms
05-15 03:59:12.309 1666 12302 I am_anr : [0,3201,test.screen,550026821,Input dispatching timed out (Application does not have a focused window)]
05-15 10:51:42.606 1666 12302 E ActivityManager: ANR in com.zeekr.screensaver (test.screensaver/.activity.PreviewAllActivity)
05-15 10:51:42.606 1666 12302 E ActivityManager: PID: 3201
05-15 10:51:42.606 1666 12302 E ActivityManager: Reason: Input dispatching timed out (Application does not have a focused window)
05-15 10:51:42.606 1666 12302 E ActivityManager: Parent: test.screen/.activity.PreviewAllActivity

player为null,不会触发任何耗时操作,并且该activity中stop没有耗时操作,属于应用窗口没有焦点导致系统无法输入
Monkey下导致的系统异常
浙公网安备 33010602011771号