内存信息
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
View Code

Pss是进程实际占用的物理内存大小,Rss是进程在物理内存中实际映射的总大小(包括代码段(.so/.jar)、缓存页等非匿名内存)

另外Offscreen Layers:下如果出现多个无法回收的surfaceview表示有泄露,可以多次进入退出测试,在达到三四个时系统会自动回收一次,如果没回收需要处理泄露问题

image

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]

image

很显然是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的发生时间

image

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

image

看到触发点在42秒,Waited 5000ms,从37秒开始排查应用进程下有无异常

整体看下来,只有一个图片加载的警告,只是警告理论上可以排除,但是不能保证没有关系

image

继续跟进,找到下面日志,可以看出,该警告是加载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加载,主线程无耗时操作,基本可以排除原因,接下来看其它信息

image

主线程中看到,有四个重要日志,首先排除第一条,只是一个加载提示,接着是两个接口方法打印,这个接口是跨进程调用,所以存在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)
        }
    }
syncPreviewFontColor

因为是在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)
anr-log

从堆栈看出,是视频播放器的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
android-log

看到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}")
        }
    }
releasePlayer

可以看到执行链路,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));
    }
  }
View Code

解决方案,需要优化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

可以看到主线程空闲,属于无效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
android-log

image

player为null,不会触发任何耗时操作,并且该activity中stop没有耗时操作,属于应用窗口没有焦点导致系统无法输入

Monkey下导致的系统异常

 

 

 

 
 
 
posted on 2025-10-11 17:18  翻滚的咸鱼  阅读(36)  评论(0)    收藏  举报