Activity 的启动

193 阅读1分钟

在 Android 的开发中Activity是每个开发者最熟悉的一个组件。但是每个开发对他真的了解吗?今天我们就翻看生死簿看看Activity的生生死死。

Activity 启动

当用户在桌面点击应用,应用就启动了。那么在这个过程中发生了什么?应用是怎么被起动起来的呢?这里可以分为3个过程展开。Laucher 到 AMS 、AMS 到 ApplicationThread 和 ActivityThread 启动 Activity。

  • Laucher 到 AMS

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

QLR5p6.md.png

  • ActivityThread 启动Activity的过程

QLWgv8.md.png