在平时开发中,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的更多相关文章

  1. Android Studio教程从入门到精通

    最新2.0系列文章参考: Android Studio2.0 教程从入门到精通Windows版 - 安装篇Android Studio2.0 教程从入门到精通Windows版 - 入门篇Android ...

  2. Android开发艺术探索读书笔记——01 Activity的生命周期

    http://www.cnblogs.com/csonezp/p/5121142.html 新买了一本书,<Android开发艺术探索>.这本书算是一本进阶书籍,适合有一定安卓开发基础,做 ...

  3. 文章之间的基本总结:Activity生命周期

    孔子:温故而知新.它可以作为一个教师.<论语> 同样的学习技巧.对于技术文件或书籍的经典技术,期待再次看到它完全掌握,这基本上是不可能的,所以,我们常常回来几次,然后仔细研究,为了理解作者 ...

  4. 【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 ...

  5. Android精通教程-第一节Android入门简介

    前言 大家好,给大家带来Android精通教程-第一节Android入门简介的概述,希望你们喜欢 每日一句 If life were predictable it would cease to be ...

  6. Android精通教程V

    前言 大家好,给大家带来Android精通教程V的概述,希望你们喜欢 前言 如果你想学习Android开发,那你就要了解Java编程,这是基础,也是重点,如果没学Java语法就先学习,再来学Andro ...

  7. 精通android体系架构、mvc、常见的设计模式、控制反转(ioc)

    1.请看某个著名的it公司一则招聘信息的其中一条要求:“熟悉android系统架构及相关技术,1年以上实际android平台开发经验:”,里面非常明确的说道要求熟练android系统架构,这从某种程度 ...

  8. Android开发初期之后怎么提升?怎么才能叫精通?方向在哪?

    hi大头鬼hi Android开发专家     先mark一下,好多人我发现始终停留在两三年的水平上没有突破. 另外还有一个误区就是越底层越牛逼 第三个就是,我认识的大部分所谓的做过rom开发的对fr ...

  9. Android零基础入门第83节:Activity间数据传递方法汇总

    在Activity间传递的数据一般比较简单,但是有时候实际开发中也会传一些比较复杂的数据,本节一起来学习更多Activity间数据的传递. 一.常用数据类型 在前面几节我们只学习了一些常用类型的数据传 ...

随机推荐

  1. linux之awk

    相较于sed 常常作用于一整个行的处理,awk 则比较倾向于一行当中分成数个『字段』来处理. 因此,awk 相当的适合处理小型的数据数据处理呢! awk 通常运作的模式是这样的: [root@linu ...

  2. android下tcpdump抓包

    tcpdump是最快捷方便的抓包方式,还可以加深对网络协议的理解.android下可以通过如下方式抓包: 1 Android上启动tcpdump Android设备可以把tcpdump的可执行文件上传 ...

  3. VS2010/MFC对话框:消息对话框

    消息对话框 我们在使用Windows系统的过程中经常会见到消息对话框,提示我们有异常发生或提出询问等.因为在软件开发中经常用到消息对话框,所以MFC提供了两个函数可以直接生成指定风格的消息对话框,而不 ...

  4. move.js

    function startMove(obj,json,fn){ var flag=true;//标志所有运动是否到达目标值 clearInterval(obj.timer); obj.timer=s ...

  5. 使用COCOS2D-X JSB开发,在js页面中设置iOS键盘模式

    XYSDK.h void setKeyboardType(int type); XYSDK.cpp voidXYSDK::setKeyboardType(int type) { #if (CC_TAR ...

  6. 第三章 用 PowerShell 进行远程管理(remoting)

    第三章 用 PowerShell 进行远程管理(remoting) PowerShell V2 引进了一项强大的新技术,远程(remoting),PowerShell V3 进行了完善和扩展.主要基于 ...

  7. Jquery简单动画的实现记录

    <div style="background:#98bf21;height:100px;width:100px;"> //从元素当前所在位置,往下消失 $(docume ...

  8. C#复习三(Day 22)

    哈哈,又到了总结的时间了.今天还是在继续复习C#的基础语法.这次总结主要以一下小程序为主. Split()的运用 123-456---789-----123-2把类似的字符串中重复符号去掉,得到123 ...

  9. wamp+thinkphp环境配置

    下载wamp并安装,启动wamp,会出现一个小图标,然后点击它——>Start All Services.我点击之后是橙色,不是绿色.绿色代表成功启动.我是IIS占用了80端口的缘故,所以我修改 ...

  10. bzoj 1196: [HNOI2006]公路修建问题 二分+并查集

    题目链接 1196: [HNOI2006]公路修建问题 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1576  Solved: 909[Submit ...