http://www.cnblogs.com/bastard/archive/2012/04/07/2436262.html

Android Activity学习笔记——Activity的启动和创建

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

于是想深入了解一下Activity到底是怎么一回事怎么运行来的;里面的东东真是叫个庞大;

现在只能简单的了解其框架性的概念和流程;

一 Activity概念

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

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

在应用程序中用到的所有activity都需要在manifest.xml文件中进行注册;

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

二 Activity框架和管理结构

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

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

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相关实例引用;

    

 

  借助网上一些达人的总结以及自己结合代码的分析,总结上述流程框架方面的东东;

可能并不一定准确或存在漏洞,恳请达人指点多谢;

Android学习笔记——Activity的启动和创建的更多相关文章

  1. Android Activity学习笔记——Activity的启动和创建

    http://www.cnblogs.com/bastard/archive/2012/04/07/2436262.html 最近学习Android相关知识,感觉仅仅了解Activity几个生命周期函 ...

  2. android学习笔记 activity生命周期&任务栈&activity启动模式

    activity生命周期 完整生命周期 oncreate->onstart->onresume->onpause->onstop->ondestory 使用场景:应用程序 ...

  3. Android学习笔记-App初始启动界面实现

    android手机上的很多应用程序启动时都会先显示一个图片,作为该应用程序的开始,该图片转瞬即逝.这个图片一般都会用应用的图标,作为广告来用. 例如: 它的实现方式很简单,我们以一个测试APP为例,介 ...

  4. [Android学习笔记]Activity

    每一个activity都表示一个屏幕,程序把activity呈现给用户,而在activity上实际看到的UI控件,都是View. 故把activity简单理解为view的容器. activity的状态 ...

  5. Android学习笔记----Activity的生命周期图示

    转载,一目了然.

  6. Android学习笔记之Activity详解

    1 理解Activity Activity就是一个包含应用程序界面的窗口,是Android四大组件之一.一个应用程序可以包含零个或多个Activity.一个Activity的生命周期是指从屏幕上显示那 ...

  7. Pro Android学习笔记(一三七):Home Screen Widgets(3):配置Activity

    文章转载仅仅能用于非商业性质,且不能带有虚拟货币.积分.注冊等附加条件.转载须注明出处http://blog.csdn.net/flowingflying/以及作者@恺风Wei. 通过widget定义 ...

  8. android学习笔记二、Activity深入学习

    一.创建和使用: 1.Activity是android的四大组件之一,需要继承Activity并在清单文件中进行声明才能使用.没有声明则报错. 2.启动Activity是通过Intent,有两种方式: ...

  9. 【转】 Pro Android学习笔记(七六):服务(1):local和remote

    文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ Android提供服务,服务是运行在后台的 ...

随机推荐

  1. PHP标记

    1. xml风格 <?php echo 'ok'; ?> 推荐风格 2. 简短风格 <? echo 'ok'; ?> 限制条件:在配置文件中启用short_open_tag选项 ...

  2. 通过Alexa API获取Alexa排名

    我们通会用Alexa的网站(或其它站长工具网站)来栓查我们的网​站流量排名,这样就必须去那些网站.实际上,可以通过Alexa XML API 获取网站的Alexa相关的数据(XML格式的),再使用XM ...

  3. 在Qt中怎样显示ASCII码大于127的字符

    前段时间要显示“≤”符号找了挺久没找到方法,后面发现用以下方法可以解决: ushort gd[]={8805,0};    QString gteq=QString::fromUtf16(gd); 得 ...

  4. Cocos2d-x 2.1.5 简单动画

    Cocos2d新版本函数更改了一些. 下面的代码可以产生一个简单动画. //第一步:生成动画需要的数据 CCTexture2D *texture=CCTextureCache::sharedTextu ...

  5. tr 替换删除字符

    1.关于tr    通过使用 tr,您可以非常容易地实现 sed 的许多最基本功能.您可以将 tr 看作为 sed 的(极其)简化的变体:它可以用一个字符来替换另一个字符,或者可以完全除去一些字符.您 ...

  6. UML_活动图

    一.活动图的组成元素 Activity Diagram Element 1.活动状态图(Activity) 2.动作状态(Actions) 3.动作状态约束(Action Constraints) 4 ...

  7. canvas动画文字效果

    Doughnut Chartvar c=document.getElementById("canvas");var ctx=c.getContext("2d") ...

  8. ACM学习-POJ-1143-Number Game

    菜鸟学习ACM,纪录自己成长过程中的点滴. 学习的路上,与君共勉. ACM学习-POJ-1143-Number Game Number Game Time Limit: 1000MS   Memory ...

  9. js查找和过滤

    通常情况下选择器可以直接定位到我们想要的元素,但是,当我们拿到一个jQuery对象后,还可以以这个对象为基准,进行查找和过滤. 最常见的查找是在某个节点的所有子节点中查找,使用find()方法,它本身 ...

  10. Struts2(三)——数据在框架中的数据流转问题

    一款软件,无在乎对数据的处理.而B/S软件,一般都是用户通过浏览器客户端输入数据,传递到服务器,服务器进行相关处理,然后返回到指定的页面,进行相关显示,完成相关功能.这篇博客重点简述一下Struts2 ...