Android核心分析(22)-----Android应用框架之Activity

3 Activity设计框架

3.1 外特性空间的Activity

    我们先来看看,Android应用开发人员接触的外特性空间中的Activity,对于AMS来讲,这个Activity就是客服端的Activity。应用程序员在建立Android应用时,构建Activity的子类就是Andoid外特性空间展现的接口。我们可以从下面的简单的例子描述看看Activity,到底如何建立的。

DemoActivity extend Activity

{

     onCreate

    onResume

    onPause

    onStop

}

    在Android的外特性空间(SDK)中,Android应用程序员根本不知道进程是什么时候起来的,系统消息是如何传递过来的。这个DemoActivity是如何实例化的呢?并且该Activity是托管在哪个进程的呢?本节的分析将给出答案。

我们从ActivityThread中可以看到在应用进程中的Activity都被放置在mActivities中。

image_thumb3

    这些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的关系图可以表示如下:

image_thumb6

       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。

  image_thumb10

3.4 Activity的Resume

(1)Activity什么时候被Resume

image_thumb13

(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的过程如下:

image_thumb16

Android 核心分析 之一--------分析方法论探讨之设计意图.......................................... 1 Android 核心分析 之二 -------方法论探讨之概念空间篇..............................................3 Android 是什么 之三-------手机之硬件形态.....................................................................5 Android 核心分析之四 ---手机的软件形态...................................................................... 6 Android 核心分析 之五 -----基本空间划分.................................................................... 7 Android 核心分析 之六 -----IPC 框架分析 Binder,Service,Service manager..... 11 Android 核心分析 之七------Service 深入分析..............................................................21 Android 核心分析 之八------Android 启动过程详解................................................... 31 Android 核心分析 之九-------Zygote Service.................................................................. 36 Android 核心分析 之十-------Android GWES 之基本原理篇.......................................40 Android 核心分析 之十一-------Android GWES 之消息系统.......................................43 Android 核心分析(12) -----Android GEWS 窗口管理之基本架构原理...................... 48 Android 核心分析(13) -----Android GWES 之 Android 窗口管理............................... 50 Android 核心分析(14)------ Android GWES 之输入系统..........................................57 Android 核心分析(15)--------Android 输入系统之输入路径详解.............................. 59 Android 核心分析(16)-----Android 电话系统-概述篇...............................................66 Android 核心分析(17) ------电话系统之 rilD............................................................ 69 Android 核心分析(18)-----Android 电话系统之 RIL-Java........................................ 76 Android 核心分析(19)----电话系统之 GSMCallTacker.............................................84 Android 核心分析(20)----Android 应用程序框架之无边界设计意图....................... 87 Android 核心分析(21)----Android 应用框架AndroidApplication....................... 88 Android 核心分析(22)-----Android 应用框架Activity..........................................93 Android 核心分析(24)-----Android GDI 之显示缓冲管理.........................................104 Android 核心分析(25)------Android GDI 之共享缓冲区机制................................ 112 Android 核心分析(26)-----Android GDI 之 SurfaceFlinger..................................... 116 Android 核心分析(27)-----Android GDI 之 SurfaceFlinger 之动态结构示意图..123 Android 核心分析(28)-----Android GDI 之 Surface&Canvas..................................126
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值