在平时开发中,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. 一年开发ASP.NET MVC4项目经验总结

    一年开发ASP.NET MVC4项目所用所学技术经验总结 阅读目录 文章背景 前端所用技术摘要 后端所用技术摘要 1. 文章背景 本人2014年从Java转行到C#从事BS项目的开发,刚开始接触的是A ...

  2. java下拉框,滚动条

    package com.soft.test; /** * 下拉列表.下拉框.滚动条的使用 */ import javax.swing.*; import java.awt.*; public clas ...

  3. 星际SC地图制作中生成随机位置,也包括所有需要随机的效果

    星际SC地图制作中生成随机位置,也包括所有需要随机的效果 利用单位 kakaru T 开头那个, kakaru是随机变化位置 注意kakaru的放置位置和占用格子大小,kakaru周围放上LOCATI ...

  4. sublime模式下开启vim并修改esc

    首先我用的是sublime text2 sublime下开启vim模式: 在Preference -> Setting-User里面加上 "ignored_packages" ...

  5. Oracle数据库时间修改

    http://blog.csdn.net/tianlesoftware/article/details/6163859

  6. 编程器NAND Flash 技术入门

    NAND Flash分类 SLC(Single-Level Cell)架构:单一储存单元(Cell)可储存1bit data MLC(Multi-Level Cell)架构:单一储存单元(Cell)可 ...

  7. mysql 主从实现

    主库:192.168.1.19 从库:192.168.1.20 开启db_test单库复制 常见问题 参考文档 主配置  以mysql root用户登录,用下面sql创建专门用于主从复制的mysql用 ...

  8. C++读写EXCEL文件OLE,java读写excel文件POI 对比

    C++读写EXCEL文件方式比较 有些朋友问代码的问题,将OLE读写的代码分享在这个地方,大家请自己看.http://www.cnblogs.com/destim/p/5476915.html C++ ...

  9. 《windows程序设计》学习_3.2:左键的使用

    #include<windows.h> #include "resource.h" LRESULT CALLBACK WndProc (HWND, UINT, WPAR ...

  10. Mac经常使用快捷键

    Mac使用快捷键会节省非常多时间.使用最多的键就是shift键  option键 command键的组合了.当然一下略微用得多一点点,还有非常多快捷键没一一列举了 进入指定文件夹的一些快捷键 进入 A ...