在 Android 的开发中Activity是每个开发者最熟悉的一个组件。但是每个开发对他真的了解吗?今天我们就翻看生死簿看看Activity的生生死死。
Activity 启动
当用户在桌面点击应用,应用就启动了。那么在这个过程中发生了什么?应用是怎么被起动起来的呢?这里可以分为3个过程展开。Laucher 到 AMS 、AMS 到 ApplicationThread 和 ActivityThread 启动 Activity。
- Laucher 到 AMS

当用户点击图标后,调用Launcher的startActivitySafely,该方法会添加一个 Intent.FLAG_ACTVITY_NEW_TASK 标记,该标记会让根 Activity 在一个新的任务栈中启动。
在这个调用过程中实际是通过 Binder 掉用系统服务AMS。
看下ActivityManager.getService() 是怎么实现的
public static IActivityManager gerService(){
return IActivityManagerSingleton.get();
}
private static Singleton<IActivityManager> IActivityManagerSingleton = new Singleton<IActivityManager>(){
protected IActivityManager create(){
final IBinder b = ServiceManager.getService.getService(Context.ACTIVITY_SERVICE);// 通过"activity"获取 AMS 的 IBinder 引用;
Final IActivityManager am = IActivityManager.Stub.asInterface(b);
return am;
}
}
- AMS 到 ApplicationTread

- ActivityThread 启动Activity的过程
