手机在输入界面进入退出导致手机重启 (Watchdog重启问题分析)

9820E E516横屏项目,手机在使用过程中出现framework crash。通过log工具发现是

WATCHDOG KILLING SYSTEM PROCESS: Blocked in monitor com.android.server.am.ActivityManagerServiceEx on foreground thread (android.fg), 

Blocked in handler on main thread (main), 

Blocked in handler on WindowManager thread (WindowManager)。

WATCHDOG重启

然后main log 里面没有看到有效信息,

systemlog 里面

1-01 08:47:43.009   624   808 W Watchdog: *** WATCHDOG IS GOING TO KILL SYSTEM PROCESS: Blocked in monitor com.android.server.am.ActivityManagerServiceEx on foreground thread (android.fg), Blocked in handler on ActivityManager (ActivityManager), Blocked in handler on WindowManager thread (WindowManager)

01-01 08:47:43.009   624   808 D ActivityManager: dumpStackTraces begin

01-01 08:47:43.009   624   808 D ActivityManager: dumpStackTraces NATIVE_STACKS_OF_DEFAULT_PREDUMP pid 218

01-01 08:47:43.679   624   808 D ActivityManager: dumpStackTraces nativeProcs pid 197

01-01 08:47:43.789   624   808 D ActivityManager: dumpStackTraces nativeProcs pid 218

01-01 08:47:44.239   624   808 D ActivityManager: dumpStackTraces nativeProcs pid 224

01-01 08:47:45.029   624   808 D ActivityManager: dumpStackTraces firstPids(0) pid 624

01-01 08:47:47.839   624   808 D ActivityManager: dumpStackTraces NATIVE_STACKS_OF_DEFAULT pid 218

01-01 08:47:48.289   624   808 D ActivityManager: dumpStackTraces NATIVE_STACKS_OF_DEFAULT pid 224

01-01 08:47:49.099   624   808 D ActivityManager: dumpStackTraces end

01-01 08:47:49.099   624   808 W Watchdog: *** WATCHDOG after dumpStackTraces

01-01 08:47:52.109   624   808 W Watchdog: *** WATCHDOG after the second dumpKernelStackTraces

01-01 08:47:54.109   624   808 W Watchdog: *** WATCHDOG start addErrorToDropBox

01-01 08:47:54.489   624   808 W Watchdog: *** WATCHDOG end addErrorToDropBox

01-01 08:47:54.489   624   808 W Watchdog: *** WATCHDOG KILLING SYSTEM PROCESS: Blocked in monitor com.android.server.am.ActivityManagerServiceEx on foreground thread (android.fg), Blocked in handler on ActivityManager (ActivityManager), Blocked in handler on WindowManager thread (WindowManager)

01-01 08:47:54.489   624   808 W Watchdog: foreground thread stack trace:

01-01 08:47:54.489   624   808 W Watchdog:     at com.android.server.am.ActivityManagerService.monitor(ActivityManagerService.java:16858)

01-01 08:47:54.489   624   808 W Watchdog:     at com.android.server.Watchdog$HandlerChecker.run(Watchdog.java:192)

01-01 08:47:54.489   624   808 W Watchdog:     at android.os.Handler.handleCallback(Handler.java:733)

01-01 08:47:54.489   624   808 W Watchdog:     at android.os.Handler.dispatchMessage(Handler.java:95)

01-01 08:47:54.489   624   808 W Watchdog:     at android.os.Looper.loop(Looper.java:136)

01-01 08:47:54.489   624   808 W Watchdog:     at android.os.HandlerThread.run(HandlerThread.java:61)

01-01 08:47:54.489   624   808 W Watchdog: ActivityManager stack trace:

01-01 08:47:54.489   624   808 W Watchdog:     at com.android.server.am.ActiveServices$ServiceMap.handleMessage(ActiveServices.java:185)

01-01 08:47:54.489   624   808 W Watchdog:     at android.os.Handler.dispatchMessage(Handler.java:102)

01-01 08:47:54.489   624   808 W Watchdog:     at android.os.Looper.loop(Looper.java:136)

01-01 08:47:54.489   624   808 W Watchdog:     at com.android.server.am.ActivityManagerService$AThread.run(ActivityManagerService.java:2006)

01-01 08:47:54.489   624   808 W Watchdog: WindowManager thread stack trace:

01-01 08:47:54.489   624   808 W Watchdog:     at com.android.server.wm.WindowManagerService$H.handleMessage(WindowManagerService.java:7486)

01-01 08:47:54.489   624   808 W Watchdog:     at android.os.Handler.dispatchMessage(Handler.java:102)

01-01 08:47:54.489   624   808 W Watchdog:     at android.os.Looper.loop(Looper.java:136)

01-01 08:47:54.489   624   808 W Watchdog:     at android.os.HandlerThread.run(HandlerThread.java:61)

01-01 08:47:54.489   624   808 W Watchdog: *** GOODBYE!

 

以为没有价值

(从目前查到的凶手是WindowManagerService看,这个信息是有价值的,提到的几个service都应该检查是否有耗时操作)

 

然后进行各种联想还原,发现无效,最后发现这个和ANR是一样的,有用的信息都在traces.log里面,有记录当前卡在哪里了

顺序查找,看下是否有修改的耗时的地方。就能发现问题了,

当前我们后行添加的修改是在  at com.android.server.wm.WindowManagerService.getActivity(WindowManagerService.java:5968)

(当前手机特殊为横屏手机,微信应用在这个几面显示旋转了,研发在这个类里面通过判断顶层应用是否为微信,强制进行了旋转使其正常,产生问题)

跟log吻合

"Binder_1" prio=5 tid=9 MONITOR

  | group="main" sCount=1 dsCount=0 obj=0x41821bf0 self=0x80e44688

  | sysTid=653 nice=0 sched=0/0 cgrp=apps handle=-2132523968

  | state=S schedstat=( 420131427 522294460 1825 ) utm=20 stm=22 core=1

  at com.android.server.am.ActivityManagerService.getTasks(ActivityManagerService.java:~7225)

  - waiting to lock <0x4182a3f8> (a com.android.server.am.ActivityManagerServiceEx) held by tid=64 (Binder_9)

  at android.app.ActivityManager.getRunningTasks(ActivityManager.java:785)

  at android.app.ActivityManager.getRunningTasks(ActivityManager.java:821)

  at com.android.server.wm.WindowManagerService.getActivity(WindowManagerService.java:5968)

  at com.android.server.wm.WindowManagerService.updateRotationUncheckedLocked(WindowManagerService.java:6030)

  at com.android.server.wm.WindowManagerService.updateOrientationFromAppTokensLocked(WindowManagerService.java:3735)

  at com.android.server.wm.WindowManagerService.relayoutWindow(WindowManagerService.java:3043)

  at com.android.server.wm.Session.relayout(Session.java:190)

  at android.view.IWindowSession$Stub.onTransact(IWindowSession.java:235)

  at com.android.server.wm.Session.onTransact(Session.java:125)

  at android.os.Binder.execTransact(Binder.java:427)

  at dalvik.system.NativeStart.run(Native Method)

log里同样发现   at com.android.internal.policy.impl.PhoneWindowManager.getTopActivity(PhoneWindowManager.java:4255) 应该也是有隐患的。

 "InputDispatcher" prio=10 tid=30 MONITOR

  | group="main" sCount=1 dsCount=0 obj=0x419556a8 self=0x81726e48

  | sysTid=710 nice=-8 sched=0/0 cgrp=apps handle=-2123208264

  | state=S schedstat=( 1637991276 961247664 12418 ) utm=95 stm=68 core=0

  at com.android.server.am.ActivityManagerService.getTasks(ActivityManagerService.java:~7225)

  - waiting to lock <0x417eb3f8> (a com.android.server.am.ActivityManagerServiceEx) held by tid=59 (Binder_5)

  at android.app.ActivityManager.getRunningTasks(ActivityManager.java:785)

  at android.app.ActivityManager.getRunningTasks(ActivityManager.java:821)

  at com.android.internal.policy.impl.PhoneWindowManager.getTopActivity(PhoneWindowManager.java:4255)

  at com.android.internal.policy.impl.PhoneWindowManager.interceptKeyBeforeDispatching(PhoneWindowManager.java:2481)

  at com.android.server.wm.InputMonitor.interceptKeyBeforeDispatching(InputMonitor.java:382)

  at com.android.server.input.InputManagerService.interceptKeyBeforeDispatching(InputManagerService.java:1353)

  at dalvik.system.NativeStart.run(Native Method)

 

 

 

从上面log看和历史出现问题 以下getTopActivity()方法(Android4.4做状态栏待机透明和非待机黑色判断是否为待机界面也使用了这个方法,出现过null的问题切换黑屏)不建议在系统级别常用服务或者类中操作

    public String getActivity(){

        ActivityManager manager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);

        List<ActivityManager.RunningTaskInfo> runningTaskInfos = manager.getRunningTasks(1);

        if (runningTaskInfos != null)

            return runningTaskInfos.get(0).topActivity.getClassName();

        else

            return null;

    }

 

经验:Watchdog现象先看traces.log

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值