Android framework——Activity的启动和建立


 本人制做的app:1号密码 欢迎试用android

  最近学习Android相关知识,感受仅仅了解Activity几个生命周期函数基本上没有任何意义的;app

因而想深刻了解一下Activity究竟是怎么一回事怎么运行来的;里面的东东真是叫个庞大;框架

如今只能简单的了解其框架性的概念和流程;socket

一 Activity概念

  Android的核心不是Application而是Activity,至少在咱们开发的时候是这样的;函数

  Activity就是被用来进行与用户交互和用来与android内部特性交互的组件,学习

在应用程序中用到的全部activity都须要在manifest.xml文件中进行注册;线程

那么Activity又是怎样一种组件,怎么样进行显示交互的,一个activity实例是如何被管理和运行起来的,activity生命周期又是怎么一回事。代理

二 Activity框架和管理结构

Activity管理的核心是AcitivityManagerService,是一个独立的进程;xml

ActiveThread是每个应用程序所在进程的主线程,循环的消息处理;htm

ActiveThread与AcitivityManagerService的通讯是属于进程间通讯,使用binder机制;

 

 

    

 

 

三 Activity启动过程

以启动一个应用程序startActivity为例看一下代码执行的大概流程:

 

    

 

可将其分为6个过程:

1 使用代理模式启动到ActivityManagerService中执行;

2 建立ActivityRecord到mHistory记录中;

3 经过socket通讯到Zgote相关类建立process;

4 经过ApplicatonThread与ActivityManagerService创建通讯;

5 ActivityManagerService通知ActiveThread启动Activity的建立;

6 ActivityThread建立Activity加入到mActivities中并开始调度Activity执行;

请看下图:

  

          

 

并非全部启动一个Activity都是这样的过程:一个应用程序中全部Activity只有一个ActivityThread属于一个Process;

         ActivityStack并非每次都须要建立一个Stack来管理Activities;

下面看看adnroid系统中四个重要概念:

Application:由多个相关的松散的与用户进行交互Activity组成,一般被打包成apk后缀文件中;

Activities:应用程序的主要组成部分,是应用程序的核心;

ActivityStack:将应用程序中打开的Activity保存在历史栈中,按照栈的先进后出的原则;

Start Activity时入栈,返回时出栈;

Task:将一系列相关的Activity组合,完成某个应用程序完整操做;无论activity属于哪

个Application的;

例如:写信息—调用—文件管理,都属于一个Task,但属于两个Application;

 

四 Activity启动流程类结构分析

1 ActivityService相关类

 

使用了Proxy代理模式:ActivityManagerProxy代理ActivityManagerService;

并为之提供了公共的访问接口:IActivityManager;

 

 

    

2 Activity启动 

  

    

 

3 ActivityStack管理

   

    

ActivityStack建立并存储系列建立的Activity实例,将其入栈管理mHistory;

4 ActivityThread

         This manages the execution of the main thread in anapplication process,

scheduling and executing activities,broadcasts, and other operations on it as the activity manager requests.

         是应用程序的主线程,消息循环执行者;其中有不少的内部类来完成工做;

  ActivityThread使用内部类:ApplicationThread与ActivityManagerService进行通讯,

  ActivityThread将状态变化传递控制客户端Activity的状态执行;

   mActivities保存由ActivityStack所建立的ActivityRecord相关实例引用;

    

 

 

本人开发的app:欢迎各位兄弟试用:

http://android.myapp.com/myapp/detail.htm?apkName=com.xcy.xpassword

相关文章
相关标签/搜索