3 Activity设计框架

3.1 外特性空间的Activity    我们先来看看,android应用开发人员接触的外特性空间中的Activity,对于AMS来讲,这个Activity就是客服端的Activity。应用程序员在建立Android应用时,构建Activity的子类就是Andoid外特性空间展现的接口。我们可以从下面的简单的例子描述看看Activity,到底如何建立的。
  DemoActivity extend Activitya
  {
  onCreate
  onResume
  onPause
  onStop
  }
  在Android的外特性空间(SDK)中,Android应用程序员根本不知道进程是什么时候起来的,系统消息是如何传递过来的。这个DemoActivity是如何实例化的呢?并且该Activity是托管在哪个进程的呢?本节的分析将给出答案。
  我们从ActivityThread中可以看到在应用进程中的Activity都被放置在mActivities中。
                        

11.jpg (20.14 KB, 下载次数: 0)

下载附件  保存到相册

2012-3-22 11:47 上传

 

  这些ActivityRecord记录了应用进程中,程序员建立的Activity子类的实例,我们称之为外特性空间的Activity。这些Activity类实例是放在应用程序端进行实际交互的Activity,而为了管理这些Activity,AMS内核中还有一个影子Activity,被称为HistoryRecord。
  3.2 Activity与HistoryRecord的关系
  在整个系统中,Activity实际上有两个实体。一个在应用进程中跟应用程序员打交道的Activity,一个是在AMS的中具有管理功能的History Record。应用进程中的Activity都登记ActivityThread实例中的mActivity数组中,而在AM端,HistroytRecord实例放置在mHistroy栈中。mHistory栈是Android管理Activity的场所,放置在栈顶的就是User看到的处于活动状态的Activity。
  Activity与HistrotyRecord的关系图可以表示如下:
                        

22.jpg (44.38 KB, 下载次数: 0)

下载附件  保存到相册

2012-3-22 11:48 上传

 

  Activity的内核实体是依靠在ProcessRecord的成员变量中,通过ProcessRecord我们可以访问到所有的属于该Process的Activity。而在ProcessRecord记录了与应用进程之间的联系:IActivtityThread接口。通过该接口,可以访问到所对应的Activity的方法。在Launch Activity时,AMS将对应的HistoryRecord作为token传递到客服端和客服端的Activity建立联系。在AMS中Activity状态变化时,将通过该联系找到客服端的Activity,从而将消息或者动作传递应用程序面对的接口:xxxActivity。
  3.3 Actvity的Launch过程
  1)发起请求startActivity(intent)
  2)Activity Service Manager接收到请求执行StartActivity函数。
  建立:HistoryRecord实例r。
  将r 加入到mHistory顶。
  (3)通过app.thread。scheduleLaunchActvity(app,r)@ActivityThread.java
  (4)在App应用中建立新的ActivityRecord。
  (5)建立新的Activity对象并放入到ActivityRecord中。
  (6)将ActivityRecord加入到mActivites@ActivityThread
  (7)发起Activity.onCreate(),,该onCreate就是在你的应用程序XXXActivity中的onCreate。
                     

33.jpg (43.78 KB, 下载次数: 0)

下载附件  保存到相册

2012-3-22 11:49 上传

 

  3.4 Activity的Resume(1)Activity什么时候被Resume
                     

44.jpg (18.06 KB, 下载次数: 0)

下载附件  保存到相册

2012-3-22 11:49 上传

 

  (2)Rusume的过程
  通过该过程的研究我们会进一步的了解到AMS与应用进程的交互过程。
  在AMS端,满足resume条件都会调用:Resume的核心函数:resumeTopActivityLocked@ActivityManagerService
  XXX当前栈顶的HistroyRecord
  1)窗口切换:隐藏前一个Activity的窗口,
  2)更新LRUList,(LRUList是淘汰应用程序的依据之一)
  3) XXX.app.thread.scheduleResumeActivity(XXX,
  isNextTransitionForward());
  4)completeResumeLocked
  setFocusedActivityLocked
  mFocusActivity=xxx  //此时焦点Actvitiy切换了。
  WM.setFocusedApp(xxx,
  mWindowManager.executeAppTransition();
  mNoAnimActivities.clear();
  在应用程序端:
  (5)scheduleResumeActivity
  handleResumeActivity(IBinder token, boolean clearHide, boolean isForward) {
  ActivityRecord r = performResumeActivity(token, clearHide);
  ActivityRecord r = mActivities.get(token);
  r.activity.performResume()
  performResume
  整个Resume的过程如下:
                     

55.jpg (44.24 KB, 下载次数: 0)

下载附件  保存到相册

2012-3-22 11:51 上传

 

Android核心分析之二十二Android应用框架之Activity的更多相关文章

  1. Android群英传笔记——第十二章:Android5.X 新特性详解,Material Design UI的新体验

    Android群英传笔记--第十二章:Android5.X 新特性详解,Material Design UI的新体验 第十一章为什么不写,因为我很早之前就已经写过了,有需要的可以去看 Android高 ...

  2. Android系统--输入系统(十二)Dispatch线程_总体框架

    Android系统--输入系统(十二)Dispatch线程_总体框架 1. Dispatch线程框架 我们知道Dispatch线程是分发之意,那么便可以引入两个问题:1. 发什么;2. 发给谁.这两个 ...

  3. (转载)Android项目实战(三十二):圆角对话框Dialog

    Android项目实战(三十二):圆角对话框Dialog   前言: 项目中多处用到对话框,用系统对话框太难看,就自己写一个自定义对话框. 对话框包括:1.圆角 2.app图标 , 提示文本,关闭对话 ...

  4. 手机自动化测试:appium源码分析之bootstrap十二

    手机自动化测试:appium源码分析之bootstrap十二   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣 ...

  5. 2019-2020-1 20199329《Linux内核原理与分析》第十二周作业

    <Linux内核原理与分析>第十二周作业 一.本周内容概述: 通过编程理解 Set-UID 的运行机制与安全问题 完成实验楼上的<SET-UID程序漏洞实验> 二.本周学习内容 ...

  6. Alink漫谈(二十二) :源码分析之聚类评估

    Alink漫谈(二十二) :源码分析之聚类评估 目录 Alink漫谈(二十二) :源码分析之聚类评估 0x00 摘要 0x01 背景概念 1.1 什么是聚类 1.2 聚类分析的方法 1.3 聚类评估 ...

  7. WCF技术剖析之二十二: 深入剖析WCF底层异常处理框架实现原理[中篇]

    原文:WCF技术剖析之二十二: 深入剖析WCF底层异常处理框架实现原理[中篇] 在[上篇]中,我们分别站在消息交换和编程的角度介绍了SOAP Fault和FaultException异常.在服务执行过 ...

  8. JAVA基础知识总结:一到二十二全部总结

    >一: 一.软件开发的常识 1.什么是软件? 一系列按照特定顺序组织起来的计算机数据或者指令 常见的软件: 系统软件:Windows\Mac OS \Linux 应用软件:QQ,一系列的播放器( ...

  9. (C/C++学习笔记) 二十二. 标准模板库

    二十二. 标准模板库 ● STL基本介绍 标准模板库(STL, standard template library): C++提供的大量的函数模板(通用算法)和类模板. ※ 为什么我们一般不需要自己写 ...

  10. 剑指Offer(二十二):从上往下打印二叉树

    剑指Offer(二十二):从上往下打印二叉树 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/b ...

随机推荐

  1. (转)android Fragments详解二:创建Fragment

    创建Fragment 要创建fragment,必须从Fragment或Fragment的派生类派生出一个类.Fragment的代码写起来有些像activity.它具有跟activity一样的回调方法, ...

  2. 009--VS2013 C++ 显示位图部分透明化

    其实这个更简单,只是把上一编文章的半透明化的代码去掉就可以啦 还是原来那张图片: //全局变量HBITMAP bg, girl;HDC mdc;//起始坐标const int xstart = 50; ...

  3. Qt的进度条设置

    progress bar 颜色设置 QProgressBar {   border: 2px solid grey;   border-radius: 5px;   background-color: ...

  4. 一:java概述:

    1991 年Sun公司的James Gosling等人开始开发名称为 Oak 的语言,希望用于控制嵌入在有线电视交换盒.PDA等的微处理器: 1994年将Oak语言更名为Java: Java的三种技术 ...

  5. 使用OutputDebugString输出调试信息

    在编写控制台程序的时候我们经常会使用printf输出调试信息,使我们了解程序的状态,方便调试,但是当编写非控制台程序的时候这种方法就行不通了,那我们应该怎么办?上网查了一些方法,大致就如下几种 使用L ...

  6. JS-数值篇

    数值(一) 一.数值 163——整型 3.14——符点数 2.5e11——科学计数法 0xfa1b——16进制 二.运算 1.Math.abs(x)——绝对值 举例:Math.abs(5) //5 M ...

  7. makefile常用函数

    标签(空格分隔): makefile 1.字符串替换和分析函数 $(subst from,to,text) #在文本"text"中使用"to"替换每一处&quo ...

  8. 【BZOJ】【1019】【SHOI2008】汉诺塔

    递推/DP 类似普通汉诺塔的一个递推(模拟?$10^{18}$没法模拟吧…… 题解:http://blog.csdn.net/regina8023/article/details/43016813 因 ...

  9. Leetcode#108 Convert Sorted Array to Binary Search Tree

    原题地址 对于已排序数组,二分法递归构造BST 代码: TreeNode *buildBST(vector<int> &num, int i, int j) { if (i > ...

  10. Leetcode#172 Fractorial Trailing Zero

    原题地址 n!含有多少个因子10,则结尾有多少个0 10=2*5,而2的个数肯定比5多,所以n!含有多少个因子5,则结尾有多少个0 如何计算n!有多少个因子5呢? 比如n=13,则: n! = 13 ...