android面试题-ActivityRecord TaskRecord和ProcessRecord之间的关系
2017-05-19 15:04
579 查看
源码分析相关面试题
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输出,这几个基本概念大家估计就清楚了。
相关文章推荐
- android面试题-ActivityRecord TaskRecord和ProcessRecord之间的关系
- Activity, Service,Task, Process and Thread之间的关系
- TaskRecord ActivityRecord ActivityStack之间的关系
- Android多任务切换与Activity启动模式SingleTask之间关系的分析
- Android Application与thread、stack、task、activity之间的关系
- Android中的APK,TASK,PROCESS,USERID之间的关系
- Android中的APK,TASK,PROCESS,USERID之间的关系
- Android多任务切换与Activity启动模式SingleTask之间关系的分析
- android基础部分再学习---Android中的APK,TASK,PROCESS,USERID之间的关系 UID和PID
- Activity, Service,Task, Process and Thread之间的关系
- Activity, Service,Task, Process and Thread之间的关系
- Activity, Service,Task, Process and Thread之间的关系
- Activity, Service,Task, Process and Thread之间的关系
- Activity, Service,Task, Process and Thread之间关系简介
- android中task、activity、apk之间的关系图
- Activity, Service,Task, Process and Thread之间的关系
- Android中的APK,TASK,PROCESS,USERID之间的关系
- Activity, Service,Task, Process and Thread之间的关系
- Android 编程组件-Fragments 的生命周期与 Activity 的生命周期之间的关系
- Android:分析app、Process、Task之间的区别,以及获取最近运行的程序(近期任务)与正在运行的程序