精通Activity
在平时开发中,Activity我们每个人应用的都滚瓜烂熟,回忆起来没有太难的地方,但是我们学习知识不应该只知其一不知其二,这样才能在学习的道理上越走越远,今天我要给大家分享的内容会让大家明白一些Android内部的实现机制以及Activity在整个FrameWork层是如何交互处理的和FrameWork层是如何管理Activity的生命周期的。学习之前建议大家把FrameWork的源码下载下来,下载地址:https://github.com/android/platform_frameworks_base
一、FrameWork相关类介绍
1、ActivityThread
ActivityThread本身不是一个线程,就是就jave里的一个普通的类,我们在启动一个APP应用当中,主进程会调用ActivityThread。调用完ActivityThread类之后,会做以下工作,也就是mian()方法里的内容:Looper.preparMianLooper()、ActivityThread thread=new ActivityThread ()、thread.attach(false)、Looper.loop()。当这些方法完成之后ActivityThread就会通知AMS,拿到远程代理对象IActivityManager mgr=ActivityManagerNative.getDefault();mgr.attachApplication()
2、ApplicationThread
这个类继承了ApplicationThreadNative,而ApplicationThreadNative是Binder的子类,那么说明ApplicationThread需要和远程端进行通信,主要是和ActivityMangerService进行通信。
3、ActivityClientRecord
ActivityClientrecord类里定义了许多和Activity相关的成员变量
二、Context类介绍
Context是一个接口,它有具体如下的实现类:Context——>ContextWrapper——>ContextThemeWrapper——>Activity
Context——>ComtextImpl
ContextWrapper——>Service
ContextWrapper——>Application
Context里其实定义了一些和Activity息息相关的资源,如sendBroadCast()、registerReceiver()等等,下面我来说一说Context的几个子类。
1、ContextWrapper
假如你看过这个类的源码,会发现,这里所有重写的方法都用到了一个全局变量mBase,我列出来了一个ContextWrapper类里的方法如下:
@Override
public Resources getResources()
{
return mBase.getResources();
}
那么这个全局变mBase代表什么呢,我们来看一下这个类的构造方法,发现mBase就是Context 的对象并且在构造方法里给mBase赋值了,代码如下:
Context mBase;
public ContextWrapper(Context base) {
mBase = base;
}
上面讲了一些铺垫内容,下面我要说一说Activity的生命周期
其实就是ActivityThread这个类控制着Activity生命周期的一些回调,具体的是由ActivityMangerService跨进程通信调用的,在ActivityThread的源码里有一个H类,这个H类实现了Handler,这个H类的作用就是处理ActivityMangerService跨进程通信发送过来的消息。在Activity生命周期回调的过程中,有几个重要的类和概念。
1、instrumentation类
主要作用是回调Activity生命周期的各个方法和打开Activity,也可以创建Application对象
精通Activity的更多相关文章
- Android Studio教程从入门到精通
最新2.0系列文章参考: Android Studio2.0 教程从入门到精通Windows版 - 安装篇Android Studio2.0 教程从入门到精通Windows版 - 入门篇Android ...
- Android开发艺术探索读书笔记——01 Activity的生命周期
http://www.cnblogs.com/csonezp/p/5121142.html 新买了一本书,<Android开发艺术探索>.这本书算是一本进阶书籍,适合有一定安卓开发基础,做 ...
- 文章之间的基本总结:Activity生命周期
孔子:温故而知新.它可以作为一个教师.<论语> 同样的学习技巧.对于技术文件或书籍的经典技术,期待再次看到它完全掌握,这基本上是不可能的,所以,我们常常回来几次,然后仔细研究,为了理解作者 ...
- 【UML】NO.70.EBook.9.UML.4.001-【PowerDesigner 16 从入门到精通】- 基础概念
1.0.0 Summary Tittle:[UML]NO.70.EBook.9.UML.4.001-[PowerDesigner 16 从入门到精通]- 基础概念 Style:DesignPatte ...
- Android精通教程-第一节Android入门简介
前言 大家好,给大家带来Android精通教程-第一节Android入门简介的概述,希望你们喜欢 每日一句 If life were predictable it would cease to be ...
- Android精通教程V
前言 大家好,给大家带来Android精通教程V的概述,希望你们喜欢 前言 如果你想学习Android开发,那你就要了解Java编程,这是基础,也是重点,如果没学Java语法就先学习,再来学Andro ...
- 精通android体系架构、mvc、常见的设计模式、控制反转(ioc)
1.请看某个著名的it公司一则招聘信息的其中一条要求:“熟悉android系统架构及相关技术,1年以上实际android平台开发经验:”,里面非常明确的说道要求熟练android系统架构,这从某种程度 ...
- Android开发初期之后怎么提升?怎么才能叫精通?方向在哪?
hi大头鬼hi Android开发专家 先mark一下,好多人我发现始终停留在两三年的水平上没有突破. 另外还有一个误区就是越底层越牛逼 第三个就是,我认识的大部分所谓的做过rom开发的对fr ...
- Android零基础入门第83节:Activity间数据传递方法汇总
在Activity间传递的数据一般比较简单,但是有时候实际开发中也会传一些比较复杂的数据,本节一起来学习更多Activity间数据的传递. 一.常用数据类型 在前面几节我们只学习了一些常用类型的数据传 ...
随机推荐
- ListView 条目加载上滑下滑首尾缩放动画实现
要实现这个效果,只需要再适配器getView之前,给每个条目的view设置相应的动画即可. 首先需要2个动画的xml文件. 在res下新建anim文件夹:(res/anim) 第一个动画xml文件: ...
- Linux系统管理员:不要害怕升级内核
Linux系统管理员平时很重要的一项工作就是负责系统内核升级.做好系统内核的升级工作,对于Linux系 统的稳定性具有至关重要的作用.但是很少有人敢贸然的对Linux系统的内核进行升级,担心会影响现有 ...
- VC实现卡拉OK字幕叠加
一. GDI编程基础 字幕叠加,应当是属于图形.图像处理的范畴.在Windows平台上,图形.图像处理的方法当然首选GDI(Graphics Device Interface,图形设备接口).GDI是 ...
- java ssh
sshj (currently best choice) https://github.com/shikhar/sshj ssh used in jenkins-ci https://github.c ...
- java中的集合链表
java中的集合类有很多种,每个都有自己的一些特点,推荐你专门在这方面研究一下,比方Vector,ArrayList,,LinkedList,Hashtable等,其中你问到的链表,是不是指Linke ...
- Java图形化界面设计——布局管理器之FlowLayout(流式布局)
一.布局管理器所属类包 所属类包 布局管理器名称 说明 Java.awt FlowLayout(流式布局) 组件按照加入的先后顺序按照设置的对齐方式从左向右排列,一行排满到下一行开始继续排列 Bord ...
- ZOJ 38727(贪心)
这道题真心坑.越想越远 想的飞起来了. 最后纠结起后缀表达式的定义来了. 题意: 就是给你一个串 , 让你用最少改动次数来实它变成一个合法的后缀表达式, 改动方式有两种, 一种是直接加入数字或者 ...
- linux线程间同步方式汇总
抽空做了下linux所有线程间同步方式的汇总(原生的),包含以下几个: 1, mutex 2, condition variable 3, reader-writer lock 4, spin loc ...
- Foundation NSMutableArray遍历,选取出符合条件的所有对象
一.查找数组中一个元素,找到后立即返回 当遍历数组只需要返回其中一个符合条件的元素时,使用 indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, ...
- SQL基础常用语法
一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 DROP database dbname 3.说明:创建新表 create table ...