[逆想官方课] Android 应用启动流程

[复制链接]
查看868 | 回复0 | 2024-12-4 17:37:22 | 显示全部楼层 |阅读模式

立即注册,突破游客限制,与技术大牛交流切磋,畅享海量资源,让你的技术之路不再孤单!

您需要 登录 才可以下载或查看,没有账号?立即注册

×
了解安卓的启动流程 对于了解加固原理是非常重要的
  1. ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐
  2.   第一阶段:Launcher 处理
  3.   Launcher.startActivity()
  4.      ↓
  5.   ActivityTaskManager.startActivity()
  6.      ↓ (Binder 跨进程)
  7.   ActivityManagerService.startActivity()
  8. └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┘
  9.                         ↓
  10. ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐
  11.   第二阶段:进程创建
  12.   Process.start()
  13.      ↓
  14.   ZygoteProcess.start()
  15.      ↓
  16.   Zygote.fork()
  17.      ↓
  18.   ActivityThread.main()
  19. └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┘
  20.                         ↓
  21. ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐
  22.   第三阶段:SO 加载
  23.   LoadedApk.loadLibrary()
  24.      ↓
  25.   System.loadLibrary()
  26.      ↓
  27.   Runtime.loadLibrary0()
  28.      ↓
  29.   DexPathList.findLibrary()
  30. └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┘
  31.                         ↓
  32. ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐
  33.   第四阶段:DEX 加载
  34.   PathClassLoader.loadClass()
  35.      ↓
  36.   BaseDexClassLoader.loadClass()
  37.      ↓
  38.   DexPathList.findClass()
  39.      ↓
  40.   DexFile.loadClassBinaryName()
  41. └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┘
  42.                         ↓
  43. ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐
  44.   第五阶段:Application 创建
  45.   LoadedApk.makeApplication()
  46.      ↓
  47.   Instrumentation.newApplication()
  48.      ↓
  49.   Application.attach()
  50.      ↓
  51.   Application.onCreate()
  52. └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┘
  53.                         ↓
  54. ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐
  55.   第六阶段:Activity 启动
  56.   ActivityThread.handleLaunchActivity()
  57.      ↓
  58.   ActivityThread.performLaunchActivity()
  59.      ↓
  60.   Instrumentation.newActivity()
  61.      ↓
  62.   Activity.onCreate()
  63. └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┘
  64.                         ↓
  65. ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐
  66.   第七阶段:视图绘制
  67.   Activity.setContentView()
  68.      ↓
  69.   PhoneWindow.setContentView()
  70.      ↓
  71.   LayoutInflater.inflate()
  72.      ↓
  73.   ViewRootImpl.performTraversals()
  74.      ↓
  75.   measure() → layout() → draw()
  76. └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┘
复制代码



这个人还没有签名
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

图文推荐
大神求
大神求
6 天前
热门排行