Android学习笔记——Activity的启动和创建
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的启动和创建的更多相关文章
- Android Activity学习笔记——Activity的启动和创建
http://www.cnblogs.com/bastard/archive/2012/04/07/2436262.html 最近学习Android相关知识,感觉仅仅了解Activity几个生命周期函 ...
- android学习笔记 activity生命周期&任务栈&activity启动模式
activity生命周期 完整生命周期 oncreate->onstart->onresume->onpause->onstop->ondestory 使用场景:应用程序 ...
- Android学习笔记-App初始启动界面实现
android手机上的很多应用程序启动时都会先显示一个图片,作为该应用程序的开始,该图片转瞬即逝.这个图片一般都会用应用的图标,作为广告来用. 例如: 它的实现方式很简单,我们以一个测试APP为例,介 ...
- [Android学习笔记]Activity
每一个activity都表示一个屏幕,程序把activity呈现给用户,而在activity上实际看到的UI控件,都是View. 故把activity简单理解为view的容器. activity的状态 ...
- Android学习笔记----Activity的生命周期图示
转载,一目了然.
- Android学习笔记之Activity详解
1 理解Activity Activity就是一个包含应用程序界面的窗口,是Android四大组件之一.一个应用程序可以包含零个或多个Activity.一个Activity的生命周期是指从屏幕上显示那 ...
- Pro Android学习笔记(一三七):Home Screen Widgets(3):配置Activity
文章转载仅仅能用于非商业性质,且不能带有虚拟货币.积分.注冊等附加条件.转载须注明出处http://blog.csdn.net/flowingflying/以及作者@恺风Wei. 通过widget定义 ...
- android学习笔记二、Activity深入学习
一.创建和使用: 1.Activity是android的四大组件之一,需要继承Activity并在清单文件中进行声明才能使用.没有声明则报错. 2.启动Activity是通过Intent,有两种方式: ...
- 【转】 Pro Android学习笔记(七六):服务(1):local和remote
文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ Android提供服务,服务是运行在后台的 ...
随机推荐
- IOS开发UI篇-NavigationController的基本使用
一.简介 一个iOS的app很少只由一个控制器组成,除非这个app极其简单 当app中有多个控制器的时候,我们就需要对这些控制器进行管理 有多个view时,可以用一个大的view去管理1个或者多个小v ...
- 利用raspberry pi搭建typecho笔记(三) typecho nginx sqlite FAQ
前言 这是一个汇总文,用来总结我在整个配置过程中遇到的各种问题.因为我在解决这些问题的过程中发现,typecho被部署在这种需要完全自己配置的平台上的情况是比较少的,相关的资料也比较少,所以我的解决过 ...
- sort,uniq命令
文本排序:sort 默认以ASCII表排序 -n:数值排序 -r: 降序 -t: 字段分隔符 -k: 以哪个字段为关键字进行排序 -u: 排序后相同的行只显示一次 ...
- 【转】基于V4L2的视频驱动开发
编写基于V4L2视频驱动主要涉及到以下几个知识点:1> 摄像头方面的知识 要了解选用的摄像头的特性,包括访问控制方法.各种参数的配置方法.信号输出类型等.2> Camera解码器.控制器 ...
- debian msyql 5.1 卸载与安装
卸载:apt-get autoremove --purge mysql-server-5.1 卸载服务端 apt-get remove mysql-common #一定要卸载(包含配置文件) dpkg ...
- CodePen's CSS
p{text-indent:2em;}前端开发whqet,csdn,王海庆,whqet,前端开发专家 翻译自:CodePen's CSS 翻译人员:前端开发whqet,意译为主.不当之处欢迎大家指正. ...
- DataSet、DataTable、DataRow区别
DataSet 表示数据在内存中的缓存. 属性 Tables 获取包含在 DataSet 中的表的集合. ds.Tables["sjxx"] DataTable 表示内存中数据 ...
- 查询ID为5的数据的前后各一行数据,ID不连续
首先假如有一张表 test 那么我们要查的就是 3 和 7 这里我的思路是 用SQL Server 自带的Row_Number 函数把 ID=5 的 RowNo 查出来,因为RowNo是连续的,所以它 ...
- JS转换Decimal带千分号的字符串显示
var numberChars = "0123456789"; /* Convert to decimal string */ function toDecimalString(v ...
- 记录ASP.NET页面表单初始状态(主要是为了前台可以根据这个判断页面是否变动了)
把页面表单状态记录到HiddenField中. 这里只提供后台代码, 前台逻辑根据需求自由定义. 存放值的ViewState: protected Dictionary<string, stri ...