通过源码分析一个linux进程可以运行多个android应用
来源:互联网 发布:网络汇聚层 编辑:程序博客网 时间:2024/05/16 18:56
android是运行在linux系统上的,一个android应用在启动的时候会会创建自己的进程,创建自己的任务栈,下面通过源码来查看系统是依据什么来创建一个应用的进程的.
1.系统首先通过下面的代码来判断进程是否存在,这个段代码位于ActivityStack.startSpecificActivityLocked方法中,这个方法在系统源码的frameworks/base/services/java/com/android/server/am/ActivityStack.java文件中
mService.getProcessRecordLocked(r.processName, r.info.applicationInfo.uid)
这个方法需要的就是processName,和uid.processname就是acitiviy在清单文件中配置的process属性,如果没有配置就使用的包名,每个应用都一个唯一的uid.系统就通过这2个参数来判断该应用的进程是否存在.
2.然后在通过ActivityManagerService.startProcessLocked来创建进程,该方法位于frameworks/base/services/java/com/android/server/am/ActivityManagerService.java文件中
public final class ActivityManagerService extends ActivityManagerNative implements Watchdog.Monitor, BatteryStatsImpl.BatteryCallback { final ProcessRecord startProcessLocked(String processName, ApplicationInfo info, boolean knownToBeDead, int intentFlags, String hostingType, ComponentName hostingName, boolean allowWhileBooting) { ProcessRecord app = getProcessRecordLocked(processName, info.uid); String hostingNameStr = hostingName != null ? hostingName.flattenToShortString() : null; if (app == null) { app = new ProcessRecordLocked(null, info, processName); mProcessNames.put(processName, info.uid, app); } else { // If this is a new package in the process, add the package to the list app.addPackage(info.packageName); } startProcessLocked(app, hostingType, hostingNameStr); return (app.pid != 0) ? app : null; } }
“`这个方法首先也是调用getProcessRecordLocked(processName, info.uid);判断以processName+uid命名的进程是否存在,如果不存在就通过new ProcessRecordLocked(null, info, processName)创建一个ProcessRecord赋值给app,然后调用startProcessLocked(app, hostingType, hostingNameStr)进一步操作,在这个方法中就会创建出新的进程.
3.通过上面的分析可以知道,如果想要让多个应用运行在同一个进程中,只要在清单文件的activity中将process和uid指定一样的就会运行在同一个进程中了.
- 通过源码分析一个linux进程可以运行多个android应用
- 通过源码分析一个linux进程可以运行多个android应用
- Android系统中的一个应用中启动多个进程
- 进程 vs 线程 :一个进程可以包含多个线程
- 进程 vs 线程 :一个进程可以包含多个线程
- Android 8.0系统源码分析--应用进程启动过程分析
- Linux编写一个孤儿进程,这个孤儿进程可以同时创建100个僵死进程。
- Android - 如何将2个或多个应用放到一个进程中去?
- 源码分析Android 应用进程的启动过程
- 安装一个tomcat可以运行多个tomcat实例
- Android应用运行分析
- AVD可以运行android应用无法运行
- 一个进程可以创建多少个线程
- Android - 如何将两个/多个应用放到一个进程中去?
- Android Init进程源码分析
- Android uevent进程源码分析
- Android Init进程源码分析
- Android uevent进程源码分析
- 网页设计经验总结
- system.img解包打包
- Linux 下查询 DNS 服务器信息
- z-index全面讲解
- R13shengji
- 通过源码分析一个linux进程可以运行多个android应用
- Android系统源码阅读(9):Content Provider数据更新通知
- 指向函数的指针
- 学习Hadoop第七课(HDFS架构原理)
- bootloader启动流程分析
- AIM Tech Round (Div. 2) D. Array GCD(dp,two pointers)
- 百科知识网址
- 统计损失
- Maven 手动添加 JAR 包到本地仓库