栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

应用启动过程(Activity的启动过程)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

应用启动过程(Activity的启动过程)

文章目录
    • 引言
    • 常见的应用启动场景
    • 应用启动类型
    • 应用启动关键LOG
    • 应用退出关键LOG
    • 应用冷启动的基本流程
    • 结语

引言

在上一篇Android应用启动类型介绍文章介绍了Android应用启动的类型和之间的区别,接下来学习Android应用的启动过程,应用的启动过程相对来说代码流程比较繁琐,我认为不必每个代码细节点都要完全了解,化繁为简,抓住几个重要的阶段分析即可。

我的学习路线是从应用启动场景->应用启动的类型->应用启动/退出时的关键log->应用启动过程几个主要进程的交互->应用进程和SystemServer的绑定和Activity的生命周期执行到最终显示 这几个阶段学习整个启动流程即可。

常见的应用启动场景

用户角度:桌面点击应用图标启动、最近任务栏打开、应用内部跳转到另外一个应用。
系统角度:四大组件都有可能启动应用(Activity,Service,Broadcast,ContentProvider),其中Activity的启动是用户最直观感受到的。

应用启动类型

冷启动:应用进程和内存未分配,很多实例需要初始化,耗时相对较长。
热启动:应用进程起来,只需要把后台的Activity拉到前台。

应用启动关键LOG
【main_log】07-12 20:15:48.640198   694   694 D Zygote  : Forked child process 22662  //Zygote进程fork子进程(音乐)
【sys_log】07-12 20:15:48.646994  1425  1527 I ActivityManager: Start proc 22662:com.android.music/u0a124 for pre-top-activity {com.android.music/com.android.music.WidgetToTrackActivity}
【event_log】07-12 20:15:48.646851  1425  1527 I am_proc_start: [0,22662,10124,com.android.music,pre-top-activity,{com.android.music/com.android.music.WidgetToTrackActivity}]
【event_log】07-12 20:15:48.666880  1425  1801 I am_proc_bound: [0,22662,com.android.music]
  • 从mainlog里面可以看到Zygote创建了22662这个音乐进程;
  • ActivityManager: Start proc xxxx 打印创建的进程号,应用报名和Userid;
  • for 后面是启动的原因,如activity, pre-top-activity;
  • {com.android.music/com.android.music.WidgetToTrackActivity} 是启动的Activity组件;
  • eventlog可以看到应用进程的创建和绑定过程;
应用退出关键LOG
【main_log】07-12 20:35:22.487515   694   694 I Zygote  : Process 22662 exited due to signal 9 (Killed)
【sys_log】07-12 20:35:22.290965  1425  3341 I ActivityManager: Force stopping com.android.music appid=10124 user=0: stop by com.android.launcher2
【sys_log】07-12 20:35:22.291271  1425  3341 I ActivityManager: Killing 22662:com.android.music/u0a124 (adj 50): stop com.android.music due to stop by com.android.launcher2
【event_log】07-12 20:35:22.291336  1425  3341 I am_kill : [0,22662,com.android.music,50,stop com.android.music due to stop by com.android.launcher2]
【event_log】07-12 20:35:22.293146  1425  3341 I am_destroy_service: [0,140591170,22662]
【event_log】07-12 20:35:22.293356  1425  3341 I am_destroy_service: [0,34946301,22662]
【event_log】07-12 20:35:22.294614  1425  3341 I wm_finish_activity: [0,70896381,83,com.android.music/.MusicMainActivity,proc died without state saved]
【event_log】07-12 20:35:22.300922  1425  1425 I notification_cancel: [10124,22662,com.android.music,1,NULL,0,0,0,8,NULL]
  • mainlog可以看到Zygote打印应用进程退出的原因,例子是signal 9 (Killed);
  • systemlog中看ActivityManager的打印可以查看应用是被谁退出和退出的原因;
应用冷启动的基本流程

以Launcher点击应用图标启动应用这个场景举例,主要的进程和基本调用流程如下图所示:

  1. Launcher:客户端触发startActivity(Context.startActivity),并进入Pause;
  2. SystemServer:和Zygote交互通知创建进程(Process.start);
  3. Zygote:孵化子进程(Zygote.fork()),加载ActivityThread到Dalvik虚拟机,同时放回PID给SystemServer;
  4. 目标应用进程初始化(完成attach后由AMS管理第一个Activity的生命周期流程);

基本流程如下:
Context.startActivity()—>AMS.startProcess() ----Socket---->Zygote.fork() ---->ActivityThread.main()

结语

本篇主要是对应用的启动流程有个基本的认知,详细的代码调用流程可参考从Launcher开始启动App流程源码分析。看我详细的代码调用过程后,接下里我会总结AMS中和Activity相关的关键类结构和关系。

暑期编程PK赛 得CSDN机械键盘等精美礼品!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1016817.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号