2011-9-27 21:33:17
来源:互联网 发布:数据库基础教程下载 编辑:程序博客网 时间:2024/04/28 08:33
2011-9-27 21:33:17
现在,我们如何来确认SubActivity是不是在新的进程中启动呢?Android源代码工程为我们准备了adb工具,可以查看模拟器上系统运行的状况,执行下面的命令查看:
view plaincopy to clipboardprint?
01.USER-NAME@MACHINE-NAME:~/Android$ adb shell dumpsys activity
USER-NAME@MACHINE-NAME:~/Android$ adb shell dumpsys activity 这个命令输出的内容比较多,这里我们只关心系统中的任务和进程部分:
view plaincopy to clipboardprint?
01.......
02.
03.Running activities (most recent first):
04. TaskRecord{40770440 #3 A shy.luo.process}
05. Run #2: HistoryRecord{406d4b20 shy.luo.process/.SubActivity}
06. Run #1: HistoryRecord{40662bd8 shy.luo.process/.MainActivity}
07. TaskRecord{40679eb8 #2 A com.android.launcher}
08. Run #0: HistoryRecord{40677570 com.android.launcher/com.android.launcher2.Launcher}
09.
10.......
11.
12.PID mappings:
13. ......
14.
15. PID #416: ProcessRecord{4064b720 416:shy.luo.process:shy.luo.process.main/10037}
16. PID #425: ProcessRecord{406ddc30 425:shy.luo.process:shy.luo.process.sub/10037}
17.
18.......
......
Running activities (most recent first):
TaskRecord{40770440 #3 A shy.luo.process}
Run #2: HistoryRecord{406d4b20 shy.luo.process/.SubActivity}
Run #1: HistoryRecord{40662bd8 shy.luo.process/.MainActivity}
TaskRecord{40679eb8 #2 A com.android.launcher}
Run #0: HistoryRecord{40677570 com.android.launcher/com.android.launcher2.Launcher}
......
PID mappings:
......
PID #416: ProcessRecord{4064b720 416:shy.luo.process:shy.luo.process.main/10037}
PID #425: ProcessRecord{406ddc30 425:shy.luo.process:shy.luo.process.sub/10037}
......
这里我们看到,虽然MainActivity和SubActivity都是在同一个应用程序并且运行在同一个任务中,然而,它们却是运行在两个不同的进程中,这就可以看到Android系统中任务这个概念的强大之处了,它使得我们在开发应用程序的时候,可以把相对独立的模块放在独立的进程中运行,以降低模块之间的耦合性,同时,我们又不必去考虑一个应用程序在两个进程中运行的细节的问题,Android系统中的任务会为我们打点好一切。
在启动Activity的时候,系统是如何做到在新的进程中来启动这个Activity的呢?在前面两篇文章Android应用程序启动过程源代码分析和Android应用程序内部启动Activity过程(startActivity)的源代码分析中,分别在Step 22和Step 21中分析了Activity在启动过程中与进程相关的函数ActivityStack.startSpecificActivityLocked函数中,它定义在frameworks/base/services/java/com/android/server/am/ActivityStack.java文件中:
view plaincopy to clipboardprint?
01.public class ActivityStack {
02.
03. ......
04.
05. private final void startSpecificActivityLocked(ActivityRecord r,
06. boolean andResume, boolean checkConfig) {
07. // Is this activity's application already running?
08. ProcessRecord app = mService.getProcessRecordLocked(r.processName,
09. r.info.applicationInfo.uid);
10.
11. ......
12.
13. if (app != null && app.thread != null) {
14. try {
15. realStartActivityLocked(r, app, andResume, checkConfig);
16. return;
17. } catch (RemoteException e) {
18. ......
19. }
20. }
21.
22. mService.startProcessLocked(r.processName, r.info.applicationInfo, true, 0,
23. "activity", r.intent.getComponent(), false);
24. }
25.
26.
27. ......
28.
29.}
adb shell dumpsys activity
- 2011-9-27 21:33:17
- 2011-9-17 18:21:33
- 2011-9-27 21:37:27
- 2011-9-27 21:01:43
- 2011-9-27 21:12:09
- 2011-9-27 21:12:34
- 2011-9-27 21:15:52
- 2011-9-27 21:31:25
- 2011-9-27 21:43:19
- 2011-9-17 12:21:52
- 2011-9-17 12:58:21
- 2011-9-17 21:20:56
- 2011-9-17 21:22:01
- 2011-9-27 DTD
- 2011-9-21 uml
- 2011-9-21 uml
- 8/27/2011 3:28:33 AM
- 2011-10-11 0:33:27
- linux下如何得到外网分配的ip
- 何谓函数对象
- Ajax(二)
- MySQL注射攻击与防范详解
- ORACLE四种数据类型-标量(SCALAR)、复合(COMPOSITE)、引用(REFERENCE)和LOB
- 2011-9-27 21:33:17
- lambda 函数对象
- xml(一)
- 从汇编的眼光看C++(之指针拷贝)
- js function 声明
- fedora9.0 samba服务安装步骤
- [原]as3 flash web 应用 (5)js与flash的交互
- 浅议C语言中数组和指针的互操作
- 20110927