android面试题-ActivityRecord TaskRecord和ProcessRecord之间的关系

来源:互联网 发布:淘宝清退是什么意思 编辑:程序博客网 时间:2024/04/28 20:33

转自:http://blog.csdn.net/mwq384807683/article/details/72529285

源码分析相关面试题

  • Volley源码分析
  • 注解框架实现原理
  • okhttp3.0源码分析
  • onSaveInstanceState源码分析

Activity相关面试题

  • 保存Activity的状态
  • activity的启动模式原理(一)
  • activity的启动模式原理(二)
  • activity的启动模式原理(三)
  • ActivityRecord TaskRecord和ProcessRecord之间的关系
  • service里面startActivity抛异常?activity不会

Service相关面试题

  • IntentService源码分析

与XMPP相关面试题

  • 与XMPP相关试题一
  • 与XMPP相关试题二

与性能优化相关面试题

  • 与性能优化相关面试题一
  • 与性能优化相关面试题二
  • 与性能优化相关面试题三
  • 与性能优化相关面试题四
  • 与性能优化相关面试题五
  • 与性能优化相关面试题六
  • 与IPC机制相关面试题

与登录相关面试题

  • oauth认证协议原理
  • token产生的意义
  • 微信扫一扫实现原理

与开发相关面试题

  • 迭代开发的时候如何向前兼容新旧接口
  • 手把手教你如何解决as jar包冲突
  • context的原理分析
  • 解决ViewPager.setCurrentItem中间很多页面切换方案
  • 创建虚拟机时报错 Please file a bug against Android Studio
  • 字体适配

与人事相关面试题

  • 人事面试宝典

AMS提供了一个ArrayList mHistory来管理所有的activity,activity在AMS中的形式是ActivityRecord,task在AMS中的形式为TaskRecord,进程在AMS中的管理形式为ProcessRecord。如下图所示

从图中我们可以看出如下几点规则:

1) 所有的ActivityRecord会被存储在mHistory管理;

2) 每个ActivityRecord会对应到一个TaskRecord,并且有着相同TaskRecord的ActivityRecord在mHistory中会处在连续的位置;

3) 同一个TaskRecord的Activity可能分别处于不同的进程中,每个Activity所处的进程跟task没有关系;

Activity启动时ActivityManagerService会为其生成对应的ActivityRecord记录,并将其加入到回退栈(back stack)中,另外也会将ActivityRecord记录加入到某个Task中。请记住,ActivityRecord,backstack,Task都是ActivityManagerService的对象,由ActivityManagerService进程负责维护,而不是由应用进程维护。

在回退栈里属于同一个task的ActivityRecord会放在一起,也会形成栈的结构,也就是说后启动的Activity对应的ActivityRecord会放在task的栈顶

执行adb shell dumpsys activity命令,发现有以下输出:

Task id #30  TaskRecord{7f2f34a #30 A=com.maweiqi.second U=0 sz=2}    Intent { flg=0x10000000 cmp=com.open.android.task1/.SecondActivity }     Hist #1: ActivityRecord{a0f9ded u0 com.open.android.task3/.OtherActivity t30}       Intent { flg=0x10400000 cmp=com.open.android.task3/.OtherActivity }       ProcessRecord{12090b5 27543:com.open.android.task3/u0a62}      Hist #0: ActivityRecord{1048af6 u0 com.open.android.task1/.SecondActivity t30}       Intent { flg=0x10000000 cmp=com.open.android.task1/.SecondActivity }       ProcessRecord{5bc013e 26035:com.open.android.task1/u0a59} Task id #31   TaskRecord{dce52bb #31 A=com.open.android.task3 U=0 sz=1}      Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.open.android.task3/.MainActivity }        Hist #0: ActivityRecord{f9e58c5 u0 com.open.android.task3/.MainActivity t31}      Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.open.android.task3/.MainActivity }          ProcessRecord{12090b5 27543:com.open.android.task3/u0a62} Task id #29      TaskRecord{5b063d8 #29 A=com.open.android.task1 U=0 sz=1}      Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.open.android.task1/.MainActivity }        Hist #0: ActivityRecord{689947d u0 com.open.android.task1/.MainActivity t29}          Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.open.android.task1/.MainActivity }          ProcessRecord{5bc013e 26035:com.open.android.task1/u0a59}Running activities (most recent first):   TaskRecord{7f2f34a #30 A=com.maweiqi.second U=0 sz=2}        Run #3: ActivityRecord{a0f9ded u0 com.open.android.task3/.OtherActivity t30}   TaskRecord{dce52bb #31 A=com.open.android.task3 U=0 sz=1}        Run #2: ActivityRecord{f9e58c5 u0 com.open.android.task3/.MainActivity t31}   TaskRecord{7f2f34a #30 A=com.maweiqi.second U=0 sz=2}       Run #1: ActivityRecord{1048af6 u0 com.open.android.task1/.SecondActivity t30}   TaskRecord{5b063d8 #29 A=com.open.android.task1 U=0 sz=1}       Run #0: ActivityRecord{689947d u0 com.open.android.task1/.MainActivity t29}mResumedActivity: ActivityRecord{a0f9ded u0 com.open.android.task3/.OtherActivity t30}


从图对应文字在对应adb输出,这几个基本概念大家估计就清楚了。

阅读全文
0 0
原创粉丝点击