Input事件window paused timeout导致ANR问题整理

本文详细分析了Android中Input事件window paused timeout导致的ANR问题,涉及BrightnessDialog Activity的暂停、完成流程,以及与UnityPlayerNativeActivity的交互。通过日志分析,发现可能是由于点击屏幕或按键触发BrightnessDialog的finish,导致活动状态错误,最终引发ANR。同时,文中指出在特定情况下,活动可能无法正确停止,但找到了在下一个Activity resume后的解决策略。
摘要由CSDN通过智能技术生成

Input事件window paused timeout导致ANR问题整理,最近几个项目多次出现如下类型的ANR

Activity: com.android.systemui/.settings.BrightnessDialog
Subject: Input dispatching timed out (Waiting because the touched window is paused.)

分析多份log,基本都是这个Activity发生的ANR,发生场景相同,可归为一类问题

如下记录一下对于此问题的分析:

发生ANR时间点:

01-01 12:12:51.225725  1075  1277 I WindowManager: Input event dispatching timed out sending to com.android.systemui/com.android.systemui.settings.BrightnessDialog.  Reason: Waiting because the touched window is paused.

01-01 12:12:51.336500  1075  1201 I am_anr  : [0,2479,com.android.systemui,818429453,Input dispatching timed out (Waiting because the touched window is paused.)]

BrightnessDialog Activity信息:

01-01 12:12:43.840221  2479  2479 I am_on_resume_called: [0,com.android.systemui.settings.BrightnessDialog,RESUME_ACTIVITY]

01-01 12:12:45.980270 1075 3522 I am_pause_activity: [0,225503206,com.android.systemui/.settings.BrightnessDialog,userLeaving=true]
01-01 12:12:45.981149 2479 2479 I am_on_paused_called: [0,com.android.systemui.settings.BrightnessDialog,performPause]
01-01 12:12:46.133972 1075 8348 I am_finish_activity: [0,225503206,13,com.android.systemui/.settings.BrightnessDialog,app-request]

从这里看到BrightnessDialog既走了pause流程,又走了finish流程,这里比较奇怪(问题先留着),从finish到发生ANR正好是input ANR的时间

先看下为何会走pause流程,启动了fruit游戏的activity

01-01 12:12:46.013258 1075 1197 I am_proc_start: [0,11030,10127,free.fruits.frolic.game.shalltry,activity,free.fruits.frolic.game.shalltry/com.LLK.FruitsLLK.UnityMain]
01-01 12:12:46.047620 1075 9116 I am_restart_activity: [0,56893191,14,free.fruits.frolic.game.shalltry/com.LLK.FruitsLLK.UnityMain]
01-01 12:12:46.050602 1075 9116 I am_set_resumed_activity: [0,free.fruits.frolic.game.shalltry/com.LLK.FruitsLLK.UnityMain,minimalResumeActivityLocked]

01-01 12:12:46.198058 1075 9116 I am_finish_activity: [0,56893191,14,free.fruits.frolic.game.shalltry/com.LLK.FruitsLLK.UnityMain,app-request]
01-01 12:12:46.201397 11030 11030 I am_on_create_called: [0,com.LLK.FruitsLLK.UnityMain,performCreate]

01-01 12:12:55.878632 1075 1147 I am_destroy_activity: [0,56893191,14,free.fruits.frolic.game.shalltry/com.LLK.FruitsLLK.UnityMain,finish-imm:activityIdleInternalLocked]
01-01 12:12:56.061931 11030 11030 I am_on_destroy_called: [0,com.LLK.FruitsLLK.UnityMain,performDestroy]

这个Activity(com.LLK.FruitsLLK.UnityMain)只走了onCreate方法,就finish掉了,说明这就是过渡界面(不会resume),作用就是启动其他Activity,可以看如下log

01-01 12:12:46.183829 1075 3522 I am_create_activity: [0,22823027,14,free.fruits.frolic.game.shalltry/com.LLK.FruitsLLK.UnityPlayerNativeActivity,NULL,NULL,NULL,268435456]
01-01 12:12:46.220914 1075 3522 I am_restart_activity: [0,22823027,14,free.fruits.frolic.game.shalltry/com.LLK.FruitsLLK.UnityPlayerNativeActivity]
01-01 12:12:46.223999 1075 3522 I am_set_resumed_activity: [0,free.fruits.frolic.game.shalltry/com.LLK.FruitsLLK.UnityPlayerNativeActivity,minimalResumeActivityLocked]

01-01 12:12:46.831773 11030 11030 I am_on_create_called: [0,com.LLK.FruitsLLK.UnityPlayerNativeActivity,performCreate]
01-01 12:12:46.833919 11030 11030 I am_on_start_called: [0,com.LLK.FruitsLLK.UnityPlayerNativeActivity,handleStartActivity]
01-01 12:12:46.835982 11030 11030 I am_on_resume_called: [0,com.LLK.FruitsLLK.UnityPlayerNativeActivity,RESUME_ACTIVITY]

到目前好像就是3个Activity的交互,为何会发生ANR呢

先提3个疑问

BrightnessDialog finish流程是怎么调到的
BrightnessDialog的Activity为何没有之后的流程(stop,destory)
UnityPlayerNativeActivity早已经起来了,为何还会发生BrightnessDialog的ANR
 

接下来就一一分析下3个问题

对于第一个问题:

根据log ,reason是app-request,应用自身调用的,什么情况自身会调用finish呢

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值