Galley界面按返回整体流程:

  1. FWK响应back键,在PhoneWindowManager里面会拦截back键,然后通过binder调用ATMS的finishActivity方法
  2. 在finishActivityLocked里面,会先调整当前focus栈,寻找下一个focus,由于应用是从桌面启动的,下一个栈是Home所有的栈,满足条件,将Home栈移到顶部
  3. GalleryActivity 从RESUMED ==> PAUSING ==> PAUSED ==> STOPPING
  4. Launcher 状态从STOPPED ==> RESUMED,然后触发IDLE回收
  5. GalleryActivity 状态从STOPPING ==> FINISHING ==> DESTROYING ==> DESTROYED
  6. GalleryActivity 所有的栈被回收,从ActivityDisplay remove
1.PhoneWindowManager响应back键流程
08-22 18:41:32.383  1245  1435 D WindowManager: interceptKeyTq keycode=4 interactive=true keyguardActive=false policyFlags=2b000002
08-22 18:41:32.383  1245  1435 D WindowManager: java.lang.Throwable
08-22 18:41:32.383  1245  1435 D WindowManager:     at com.android.server.policy.PhoneWindowManager.interceptKeyBeforeQueueing(PhoneWindowManager.java:3693)
08-22 18:41:32.383  1245  1435 D WindowManager:     at com.android.server.wm.InputManagerCallback.interceptKeyBeforeQueueing(InputManagerCallback.java:164)
08-22 18:41:32.383  1245  1435 D WindowManager:     at com.android.server.input.InputManagerService.interceptKeyBeforeQueueing(InputManagerService.java:1852)
08-22 18:41:32.383  1245  1435 D WindowManager:     at com.android.server.input.InputManagerService.nativeInjectInputEvent(Native Method)
08-22 18:41:32.383  1245  1435 D WindowManager:     at com.android.server.input.InputManagerService.injectInputEventInternal(InputManagerService.java:635)
08-22 18:41:32.383  1245  1435 D WindowManager:     at com.android.server.input.InputManagerService.injectInputEvent(InputManagerService.java:617)
08-22 18:41:32.383  1245  1435 D WindowManager:     at android.hardware.input.IInputManager$Stub.onTransact(IInputManager.java:392)
08-22 18:41:32.383  1245  1435 D WindowManager:     at android.os.Binder.execTransactInternal(Binder.java:1021)
08-22 18:41:32.383  1245  1435 D WindowManager:     at android.os.Binder.execTransact(Binder.java:994)

BACK键的定义:

/** Key code constant: Back key. */
public static final int KEYCODE_BACK = 4;

back键pressed打印

08-22 19:01:20.850  1315  1348 D AutofillManagerService: onBackKeyPressed()
2.在finishActivityLocked里面,会先调整当前focus栈,将Home栈移到顶部

requestFinishActivityLocked方法中,会打印调用的原因,reason=app-request

08-22 18:41:32.484  1245  1278 V ActivityTaskManager: Finishing activity token=Token{b411460 ActivityRecord{8400448 u0 com.android.gallery3d/.app.GalleryActivity t99}} r=, result=0, data=null, reason=app-request
08-22 18:41:32.485  1245  1278 D ActivityTaskManager: moveActivityStackToFront: activity=ActivityRecord{7f534c6 u0 com.android.launcher3/.Launcher t98}
08-22 18:41:32.487  1245  1278 V ActivityTaskManager: Sending position change to ActivityRecord{8400448 u0 com.android.gallery3d/.app.GalleryActivity t99 f}, onTop: false

重点看一下finishActivityLocked,在此方法中,调用了adjustFocusedActivityStack来调整focus栈。

ActivityRecord.moveFocusableActivityToTop,此方法会打印moveActivityStackToFront,此时将Launcher 所有的stack移动顶部

final boolean finishActivityLocked(ActivityRecord r, int resultCode, Intent resultData,String reason, boolean oomAdj, boolean pauseImmediately) {try {r.makeFinishingLocked();// 1.先在当前的TaskRecord里面找是否还有ActivityRecord,final TaskRecord task = r.getTaskRecord();task.taskId, r.shortComponentName, reason);final ArrayList<ActivityRecord> activities = task.mActivities;final int index = activities.indexOf(r);r.pauseKeyDispatchingLocked();// 2.调整焦点stack,adjustFocusedActivityStack(r, "finishActivity");// 3. Tell window manager to prepare for this one to be removed.r.setVisibility(false);
}
3.GalleryActivity 从RESUMED ==> PAUSING ==> PAUSED ==> STOPPING

GalleryActivity 状态 from:RESUMED to:PAUSING

08-22 18:41:32.503  1245  1278 V ActivityTaskManager: State movement: ActivityRecord{8400448 u0 com.android.gallery3d/.app.GalleryActivity t99 f} from:RESUMED to:PAUSING reason:startPausingLocked
08-22 18:41:32.503  1245  1278 V ActivityTaskManager: java.lang.Throwable
08-22 18:41:32.503  1245  1278 V ActivityTaskManager:   at com.android.server.wm.ActivityRecord.setState(ActivityRecord.java:1857)
08-22 18:41:32.503  1245  1278 V ActivityTaskManager:   at com.android.server.wm.ActivityStack.startPausingLocked(ActivityStack.java:1690)
08-22 18:41:32.503  1245  1278 V ActivityTaskManager:   at com.android.server.wm.ActivityStack.finishActivityLocked(ActivityStack.java:4046)
08-22 18:41:32.503  1245  1278 V ActivityTaskManager:   at com.android.server.wm.ActivityStack.finishActivityLocked(ActivityStack.java:3980)
08-22 18:41:32.503  1245  1278 V ActivityTaskManager:   at com.android.server.wm.ActivityStack.requestFinishActivityLocked(ActivityStack.java:3822)
08-22 18:41:32.503  1245  1278 V ActivityTaskManager:   at com.android.server.wm.ActivityTaskManagerService.finishActivity(ActivityTaskManagerService.java:1629)
08-22 18:41:32.503  1245  1278 V ActivityTaskManager:   at android.app.IActivityTaskManager$Stub.onTransact(IActivityTaskManager.java:1928)
08-22 18:41:32.503  1245  1278 V ActivityTaskManager:   at android.os.Binder.execTransactInternal(Binder.java:1021)
08-22 18:41:32.503  1245  1278 V ActivityTaskManager:   at android.os.Binder.execTransact(Binder.java:994)

GalleryActivity 状态 from:PAUSING to:PAUSED

08-22 18:41:32.531  1245  1435 V ActivityTaskManager: State movement: ActivityRecord{8400448 u0 com.android.gallery3d/.app.GalleryActivity t99 f} from:PAUSING to:PAUSED reason:completePausedLocked
08-22 18:41:32.531  1245  1435 V ActivityTaskManager: java.lang.Throwable
08-22 18:41:32.531  1245  1435 V ActivityTaskManager:   at com.android.server.wm.ActivityRecord.setState(ActivityRecord.java:1857)
08-22 18:41:32.531  1245  1435 V ActivityTaskManager:   at com.android.server.wm.ActivityStack.completePauseLocked(ActivityStack.java:1801)
08-22 18:41:32.531  1245  1435 V ActivityTaskManager:   at com.android.server.wm.ActivityStack.activityPausedLocked(ActivityStack.java:1770)
08-22 18:41:32.531  1245  1435 V ActivityTaskManager:   at com.android.server.wm.ActivityTaskManagerService.activityPaused(ActivityTaskManagerService.java:1714)
08-22 18:41:32.531  1245  1435 V ActivityTaskManager:   at android.app.IActivityTaskManager$Stub.onTransact(IActivityTaskManager.java:1981)
08-22 18:41:32.531  1245  1435 V ActivityTaskManager:   at android.os.Binder.execTransactInternal(Binder.java:1021)
08-22 18:41:32.531  1245  1435 V ActivityTaskManager:   at android.os.Binder.execTransact(Binder.java:994)

在activityPausedLocked方法里面,

    final void activityPausedLocked(IBinder token, boolean timeout) {if (DEBUG_PAUSE) Slog.v(TAG_PAUSE,"Activity paused: token=" + token + ", timeout=" + timeout);final ActivityRecord r = isInStackLocked(token);if (r != null) {mHandler.removeMessages(PAUSE_TIMEOUT_MSG, r);// 此时mPausingActivity == r,在调用completePauseLocked时传入参数resumeNext为trueif (mPausingActivity == r) {try {completePauseLocked(true /* resumeNext */, null /* resumingActivity */);} finally {mService.mWindowManager.continueSurfaceLayout();}}
4.Launcher 状态从STOPPED ==> RESUMED,然后触发IDLE回收

在finishActivityLocked方法里面,将Launcher所有的栈移到顶部,然后resumeTopActivityInnerLocked,将Launcher 状态从 from:STOPPED to:RESUMED

08-22 18:41:32.537  1245  1435 V ActivityTaskManager: State movement: ActivityRecord{7f534c6 u0 com.android.launcher3/.Launcher t98} from:STOPPED to:RESUMED reason:resumeTopActivityInnerLocked
08-22 18:41:32.537  1245  1435 V ActivityTaskManager: java.lang.Throwable
08-22 18:41:32.537  1245  1435 V ActivityTaskManager:   at com.android.server.wm.ActivityRecord.setState(ActivityRecord.java:1857)
08-22 18:41:32.537  1245  1435 V ActivityTaskManager:   at com.android.server.wm.ActivityStack.resumeTopActivityInnerLocked(ActivityStack.java:2909)
08-22 18:41:32.537  1245  1435 V ActivityTaskManager:   at com.android.server.wm.ActivityStack.resumeTopActivityUncheckedLocked(ActivityStack.java:2578)
08-22 18:41:32.537  1245  1435 V ActivityTaskManager:   at com.android.server.wm.RootActivityContainer.resumeFocusedStacksTopActivities(RootActivityContainer.java:1159)
08-22 18:41:32.537  1245  1435 V ActivityTaskManager:   at com.android.server.wm.ActivityStack.completePauseLocked(ActivityStack.java:1843)
08-22 18:41:32.537  1245  1435 V ActivityTaskManager:   at com.android.server.wm.ActivityStack.activityPausedLocked(ActivityStack.java:1770)
08-22 18:41:32.537  1245  1435 V ActivityTaskManager:   at com.android.server.wm.ActivityTaskManagerService.activityPaused(ActivityTaskManagerService.java:1714)
08-22 18:41:32.537  1245  1435 V ActivityTaskManager:   at android.app.IActivityTaskManager$Stub.onTransact(IActivityTaskManager.java:1981)
08-22 18:41:32.537  1245  1435 V ActivityTaskManager:   at android.os.Binder.execTransactInternal(Binder.java:1021)
08-22 18:41:32.537  1245  1435 V ActivityTaskManager:   at android.os.Binder.execTransact(Binder.java:994)
08-22 19:01:20.885  2835  2835 V Activity: onPause com.android.gallery3d.app.GalleryActivity@1dab85a
08-22 19:01:20.898  2835  2835 D ActivityThread: setState newLifecycleState = 4
5.GalleryActivity 状态从STOPPING ==> FINISHING ==> DESTROYING ==> DESTROYED

GalleryActivity 状态from:PAUSED to:STOPPING

08-22 18:41:32.532  1245  1435 V ActivityTaskManager: State movement: ActivityRecord{8400448 u0 com.android.gallery3d/.app.GalleryActivity t99 f} from:PAUSED to:STOPPING reason:finishCurrentActivityLocked
08-22 18:41:32.532  1245  1435 V ActivityTaskManager: java.lang.Throwable
08-22 18:41:32.532  1245  1435 V ActivityTaskManager:   at com.android.server.wm.ActivityRecord.setState(ActivityRecord.java:1857)
08-22 18:41:32.532  1245  1435 V ActivityTaskManager:   at com.android.server.wm.ActivityStack.finishCurrentActivityLocked(ActivityStack.java:4125)
08-22 18:41:32.532  1245  1435 V ActivityTaskManager:   at com.android.server.wm.ActivityStack.completePauseLocked(ActivityStack.java:1804)
08-22 18:41:32.532  1245  1435 V ActivityTaskManager:   at com.android.server.wm.ActivityStack.activityPausedLocked(ActivityStack.java:1770)
08-22 18:41:32.532  1245  1435 V ActivityTaskManager:   at com.android.server.wm.ActivityTaskManagerService.activityPaused(ActivityTaskManagerService.java:1714)
08-22 18:41:32.532  1245  1435 V ActivityTaskManager:   at android.app.IActivityTaskManager$Stub.onTransact(IActivityTaskManager.java:1981)
08-22 18:41:32.532  1245  1435 V ActivityTaskManager:   at android.os.Binder.execTransactInternal(Binder.java:1021)
08-22 18:41:32.532  1245  1435 V ActivityTaskManager:   at android.os.Binder.execTransact(Binder.java:994)

/在resumeTopActivityInnerLocked方法里面,会通过ResumeActivityItem调用ActivityThread.handleResumeActivity方法,触发Looper.myQueue().addIdleHandler(new Idler()); 回收空闲的Activity

08-22 18:41:32.562  1245  1296 V ActivityTaskManager: Activity idle: null
08-22 18:41:32.562  1245  1296 D ActivityTaskManager: allResumedActivitiesIdle: stack=0 ActivityRecord{7f534c6 u0 com.android.launcher3/.Launcher t98} not idle
08-22 18:41:32.562  1245  1296 V ActivityTaskManager: Stopping ActivityRecord{8400448 u0 com.android.gallery3d/.app.GalleryActivity t99 f}: nowVisible=false animating=true finishing=true

在activityIdleInternalLocked方法,startActivityPausingLocked方法中,将activity加入stopping的队列中

08-22 18:41:33.095  1245  1296 V ActivityTaskManager: State movement: ActivityRecord{8400448 u0 com.android.gallery3d/.app.GalleryActivity t99 f} from:STOPPING to:FINISHING reason:finishCurrentActivityLocked
08-22 18:41:33.095  1245  1296 V ActivityTaskManager: java.lang.Throwable
08-22 18:41:33.095  1245  1296 V ActivityTaskManager:   at com.android.server.wm.ActivityRecord.setState(ActivityRecord.java:1857)
08-22 18:41:33.095  1245  1296 V ActivityTaskManager:   at com.android.server.wm.ActivityStack.finishCurrentActivityLocked(ActivityStack.java:4138)
08-22 18:41:33.095  1245  1296 V ActivityTaskManager:   at com.android.server.wm.ActivityStackSupervisor.activityIdleInternalLocked(ActivityStackSupervisor.java:1354)
08-22 18:41:33.095  1245  1296 V ActivityTaskManager:   at com.android.server.wm.ActivityStackSupervisor$ActivityStackSupervisorHandler.activityIdleInternal(ActivityStackSupervisor.java:2602)
08-22 18:41:33.095  1245  1296 V ActivityTaskManager:   at com.android.server.wm.ActivityStackSupervisor$ActivityStackSupervisorHandler.handleMessage(ActivityStackSupervisor.java:2637)
08-22 18:41:33.095  1245  1296 V ActivityTaskManager:   at android.os.Handler.dispatchMessage(Handler.java:107)
08-22 18:41:33.095  1245  1296 V ActivityTaskManager:   at android.os.Looper.loop(Looper.java:214)
08-22 18:41:33.095  1245  1296 V ActivityTaskManager:   at android.os.HandlerThread.run(HandlerThread.java:67)
08-22 18:41:33.095  1245  1296 V ActivityTaskManager:   at com.android.server.ServiceThread.run(ServiceThread.java:44)08-22 18:41:33.097  1245  1296 V ActivityTaskManager: State movement: ActivityRecord{8400448 u0 com.android.gallery3d/.app.GalleryActivity t99 f} from:FINISHING to:DESTROYING reason:destroyActivityLocked. finishing and not skipping destroy08-22 18:41:33.187  1245  1435 V ActivityTaskManager: State movement: ActivityRecord{8400448 u0 com.android.gallery3d/.app.GalleryActivity t99 f} from:DESTROYING to:DESTROYED reason:removeActivityFromHistoryLocked08-22 18:41:33.192  1245  1435 I ActivityTaskManager: removeTask: removing stack=ActivityStack{6940ec7 stackId=1 type=standard mode=fullscreen visible=false translucent=true, 0 tasks}
08-22 18:41:33.200  1245  1435 V ActivityTaskManager: removeChild: detaching ActivityStack{6940ec7 stackId=1 type=standard mode=fullscreen visible=false translucent=true, 0 tasks} from displayId=0

android Back键处理流程及Log分析相关推荐

  1. 高通语音专题--呼叫保持流程和日志分析

    1  呼叫保持整体流程 以下是呼叫保持的整体流程图  前提条件:UE1 和 UE2 已经建立正常通话 2  呼叫保持流程及 log 分析 1  UI 向 QMI 发送 Hold  Call 请求 关键 ...

  2. 高通语音专题---电话会议流程和日志分析

    1  电话会议整体流程 以下呼叫流程和日志分析描述了UE中的呼叫会议过程 前提条件: UE1 保持 UE2 并与 UE3 通话. a  当 UE1 收到开始会议的请求时,它会将与 UE3 的当前通话置 ...

  3. android 通话的log分析,Android Telephony 接电话流程分析

    写在前面的话 本文主要分析Android 接电话的流程,研究的代码是Android 4.4的,现在我们只关注framework层,以CDMA为例,GSM同理. 如果图片看不清的话,可以右键选择在新标签 ...

  4. c++builder启动了怎么停止_App 竟然是这样跑起来的 —— Android App/Activity 启动流程分析...

    在我的上一篇文章: AJie:按下电源键后竟然发生了这一幕 -- Android 系统启动流程分析​zhuanlan.zhihu.com 我们分析了系统在开机以后的一系列行为,其中最后一阶段 AMS( ...

  5. android power 按键,Android Framework层Power键关机流程(一,Power长按键操作处理)

    一:Android处理Power按键长按操作 在Framework层中,Android4.x对Power键(KeyEvent.KEYCODE_POWER)的操作,我们从PhoneWindowManag ...

  6. Android 手机灭屏流程分析详解

    参考地址:https://www.jianshu.com/p/9241f3a91095 本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容: 1.前言 2.Pow ...

  7. android power键测试,Android Framework层Power键关机流程(一,Power长按键操作处理)...

    一:Android处理Power按键长按操作 在Framework层中,Android4.x对Power键(KeyEvent.KEYCODE_POWER)的操作,我们从PhoneWindowManag ...

  8. Android手机亮屏流程分析

    极力推荐Android 开发大总结文章:欢迎收藏程序员Android 力荐 ,Android 开发者需要的必备技能 注:文章转于网络,点击查看原文 PowerManagerService 之前系列文章 ...

  9. Android系统的启动流程简要分析

    这是我结合网上的资料以及自己分析android4.4的源码整理的笔记,对整个安卓系统的流程启动进行了梳理,很多细节并未展开,只是简要的进行了介绍. 一.Android系统的架构介绍 Android的整 ...

最新文章

  1. wpf Datagrid绑定 Dictionary
  2. iPhoneX快速适配,简单到你想哭。
  3. 某油企产成品标准成本估算逻辑
  4. 深入理解 x86/x64 的中断体系--IVT VS IDT
  5. php面向对象调用方法,在面向对象的php中调用方法
  6. github 开源项目 java_2019 年 GitHub 上最热门的 Java 开源项目
  7. /usr/bin/ld: 找不到 -lopencv_dep_cudart
  8. Maven学习(五)————依赖的特性辨析
  9. 错失黄金时期、连年亏损,国美App改名也难“真快乐”
  10. C#基础---Queue(队列)的应用
  11. LeetCode 234 Palindrome Linked List
  12. NSD cisco高级路由与交换技术--2014.8.16
  13. 五款app原型设计工具对比
  14. 远程桌面管理工具RDCMan
  15. 前期交互流程(PTES的第一步)
  16. testflight怎么做版本更新_TestFlight
  17. 配色(转http://huaban.com/boards/13532082/)
  18. 交通 流量 时间序列预测,神经网络 机器学习 BPNN
  19. JAVA POI WORD XWPFDocument 常用操作-随时更新
  20. 谷歌浏览器自动填充功能怎么开启?自动填充功能开启方法

热门文章

  1. PHP 基础代码大全
  2. 威联通nas的ipv4+ipv6双栈https证书ddns折腾记录
  3. 期末计算机课总结100字,期末自我鉴定100字左右9篇
  4. Linux与儿童教育
  5. 学历对计算机专业的人很重要吗?
  6. 常用的加密算法有哪些
  7. Fast-RCNN的区域候选框是怎么得到的?
  8. 查询剩余火车票及火车票售票时间
  9. 16进制的透明颜色css_在CSS中使用十六进制颜色
  10. 艾妮记账本微信小程序开发(失败版)