1. Android app 与 ActivityManagerService的通信原理(简化版)

Android 的app与 ActivityManagerService (以下简称AMS)的通信是这样的:

对上图的简单说明:

(1) Android app表示Android应用的进程;

(2) Activity Manager Service表示AMS所在的进程(应为system_server,这里为了图的直观,不引出更多的名词);

(3) Andoid app相关的内容用蓝色表示,AMS相关的内容用紫色表示。

(4) Android app 通过调用IActivityManager 将消息传递给AMS;
IActivityManager的获取:通过ActivityManagerNative.getDefault(),该方法返回IActivityManager

(5) AMS 通过调用IApplicationThread将消息传递给Android app;
IApplicationThread是在Android app调用IActivityManager的时候传递过去的。

2. 两个Android app通过AMS通信

两个Android app间的通信也是通过AMS完成的,例如App A启动App B的Activity,则App A通过IActivityManager将消息传给AMS,AMS创建App B的进程和ActivityThread。然后AMS通过IApplicationThread(蓝色的IApplicationThread)更新App A中Activity的状态(例如从resume到paused),通过IApplicationThread(棕色的IApplicationThread)创建App B的Activity。

实际过程要比这复杂得多,一旦遇到IActivityManagerIApplicationThread的调用,就要切换进程了,清楚的知道当前进程是什么,对理解AMS和ActivityThread的代码有很大的帮助。

3. 例子代码

例如,ContextImpl中的startActivityAsUser()(代码在下面), 通过ActivityManagerNative.getDefault()获取到IActivityManager对象,通过mMainThread.getApplicationThread()获取到IApplicationThread对象。

在调用ActivityManagerNative.getDefault().startActivityAsUser时,将IApplicationThread对象传给AMS。这样双方就可以方便的通信了。

    public void startActivityAsUser(Intent intent, Bundle options, UserHandle user) {// 这里去掉了try、catch,以及其他参数        ActivityManagerNative.getDefault().startActivityAsUser(            mMainThread.getApplicationThread(), getBasePackageName(), intent,            ......);    }

更详细的代码,请参考《关于Activity的getReferrer()之二:调用者的包名是如何传给mReferrer的,兼谈startActivity的详细流程》

更多相关文章

  1. 浅析android通过jni控制service服务程序的简易流程
  2. Android(安卓)Wifi模块分析(三)
  3. Android中dispatchDraw分析
  4. Android四大基本组件介绍与生命周期
  5. Android(安卓)Service AIDL
  6. Android调用天气预报的WebService简单例子
  7. android打电话发短信
  8. android 拨打紧急号码,通话时开启免提功能实现
  9. Android调用.NET Webservice报org.ksoap2.serialization.SoapPri

随机推荐

  1. Android基本操作1(意图使用、界面转换、按
  2. 第十七章 Android 常见的Service
  3. 全家桶!阿里P8大佬熬夜15天,把所有Android
  4. Tensorflow在手机端的部署——官网Androi
  5. android SQLite存储简单范例+详细注释(增
  6. Android ImageView 图片等比缩放问题
  7. Google Docs 更新,提供 Honeycomb 平板更
  8. 《疯狂Android讲义》
  9. Android学习系列(39)--Android主题和样式
  10. Android UI Action Bar之ActionBarSherlo