博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android应用程序启动过程源代码分析(5)
阅读量:7116 次
发布时间:2019-06-28

本文共 1261 字,大约阅读时间需要 4 分钟。

 Step 35. MainActivity.onCreate

      这个函数定义在packages/experimental/Activity/src/shy/luo/activity/MainActivity.java文件中,这是我们自定义的app工程文件:

 
  1. public class MainActivity extends Activity  implements OnClickListener {   
  2.        
  3.     ......   
  4.    
  5.     @Override   
  6.     public void onCreate(Bundle savedInstanceState) {   
  7.         ......   
  8.    
  9.         Log.i(LOG_TAG, "Main Activity Created.");   
  10.     }   
  11.    
  12.     ......   
  13.    
  14. }   

       这样,MainActivity就启动起来了,整个应用程序也启动起来了。

 

       整个应用程序的启动过程要执行很多步骤,但是整体来看,主要分为以下五个阶段:

       一. Step1 - Step 11:Launcher通过Binder进程间通信机制通知ActivityManagerService,它要启动一个Activity;

       二. Step 12 - Step 16:ActivityManagerService通过Binder进程间通信机制通知Launcher进入Paused状态;

       三. Step 17 - Step 24:Launcher通过Binder进程间通信机制通知ActivityManagerService,它已经准备就绪进入Paused状态,于是ActivityManagerService就创建一个新的进程,用来启动一个ActivityThread实例,即将要启动的Activity就是在这个ActivityThread实例中运行;

       四. Step 25 - Step 27:ActivityThread通过Binder进程间通信机制将一个ApplicationThread类型的Binder对象传递给ActivityManagerService,以便以后ActivityManagerService能够通过这个Binder对象和它进行通信;

       五. Step 28 - Step 35:ActivityManagerService通过Binder进程间通信机制通知ActivityThread,现在一切准备就绪,它可以真正执行Activity的启动操作了。

       这里不少地方涉及到了Binder进程间通信机制,相关资料请参考一文。

       这样,应用程序的启动过程就介绍完了,它实质上是启动应用程序的默认Activity,在下一篇文章中,我们将介绍在应用程序内部启动另一个Activity的过程,即新的Activity与启动它的Activity将会在同一个进程(Process)和任务(Task)运行,敬请关注。

本文转自 Luoshengyang 51CTO博客,原文链接:http://blog.51cto.com/shyluo/965993,如需转载请自行联系原作者
你可能感兴趣的文章
转:ios review推送与执行
查看>>
HTML,CSS,font-family:中文字体的英文名称 (宋体 微软雅黑)
查看>>
观察者模式
查看>>
iOS应用内语言切换功能
查看>>
如何写好一个UITableView
查看>>
上传伪技术~很多人都以为判断了后缀,判断了ContentType,判断了头文件就真的安全了。是吗?...
查看>>
NET Core-TagHelper实现分页标签
查看>>
Cesium原理篇:6 Renderer模块(1: Buffer)
查看>>
defered,promise回顾
查看>>
svn提交时出现很多乱文件怎么解决
查看>>
std::unique_lock<std::mutex> or std::lock_guard<std::mutex> C++11 区别
查看>>
SQL - ROW_NUMBER,Rank 添加序号列
查看>>
常见排序算法总结与实现(冒泡、插入、选择、希尔、堆排序、归并、快排)
查看>>
python3.x 和 python2.x关于 urllib的用法
查看>>
在pycharm中进行nosetests并输出测试报告
查看>>
树莓派:设置与软件安装
查看>>
JQuery日记_5.14 Sizzle选择器(七)
查看>>
debian8上安装pyspider - pyspider中文文档 - pyspider中文网
查看>>
【WaaCaa】一款开源科学作图/数据可视化工具 —— 诞生篇
查看>>
idea,eclipse创建多模块项目
查看>>