zoukankan      html  css  js  c++  java
  • Android学习笔记——Activity的启动和创建

    http://www.cnblogs.com/bastard/archive/2012/04/07/2436262.html

    Android Activity学习笔记——Activity的启动和创建

      最近学习Android相关知识,感觉仅仅了解Activity几个生命周期函数基本上没有任何意义的;

    于是想深入了解一下Activity到底是怎么一回事怎么运行来的;里面的东东真是叫个庞大;

    现在只能简单的了解其框架性的概念和流程;

    一 Activity概念

      Android的核心不是Application而是Activity,至少在我们开发的时候是这样的;

      Activity就是被用来进行与用户交互和用来与android内部特性交互的组件,

    在应用程序中用到的所有activity都需要在manifest.xml文件中进行注册;

    那么Activity又是怎样一种组件,怎么样进行显示交互的,一个activity实例是如何被管理和运行起来的,activity生命周期又是怎么一回事。

    二 Activity框架和管理结构

    Activity管理的核心是AcitivityManagerService,是一个独立的进程;

    ActiveThread是每一个应用程序所在进程的主线程,循环的消息处理;

    ActiveThread与AcitivityManagerService的通信是属于进程间通信,使用binder机制;

        

    三 Activity启动过程

    以启动一个应用程序startActivity为例看一下代码执行的大概流程:

        

    可将其分为6个过程:

    1 使用代理模式启动到ActivityManagerService中执行;

    2 创建ActivityRecord到mHistory记录中;

    3 通过socket通信到Zgote相关类创建process;

    4 通过ApplicatonThread与ActivityManagerService建立通信;

    5 ActivityManagerService通知ActiveThread启动Activity的创建;

    6 ActivityThread创建Activity加入到mActivities中并开始调度Activity执行;

    请看下图:

      

              

    并不是所有启动一个Activity都是这样的过程:一个应用程序中所有Activity只有一个ActivityThread属于一个Process;

             ActivityStack并不是每次都需要创建一个Stack来管理Activities;

    下面看看adnroid系统中四个重要概念:

    Application:由多个相关的松散的与用户进行交互Activity组成,通常被打包成apk后缀文件中;

    Activities:应用程序的主要组成部分,是应用程序的核心;

    ActivityStack:将应用程序中打开的Activity保存在历史栈中,按照栈的先进后出的原则;

    Start Activity时入栈,返回时出栈;

    Task:将一系列相关的Activity组合,完成某个应用程序完整操作;不管activity属于哪

    个Application的;

    例如:写信息—调用—文件管理,都属于一个Task,但属于两个Application;

    四 Activity启动流程类结构分析

    1 ActivityService相关类

    使用了Proxy代理模式:ActivityManagerProxy代理ActivityManagerService;

    并为之提供了公共的访问接口:IActivityManager;

        

    2 Activity启动 

      

        

    3 ActivityStack管理

       

        

    ActivityStack创建并存储系列创建的Activity实例,将其入栈管理mHistory;

    4 ActivityThread

             This manages the execution of the main thread in anapplication process,

    scheduling and executing activities,broadcasts, and other operations on it as the activity manager requests.

             是应用程序的主线程,消息循环执行者;其中有很多的内部类来完成工作;

      ActivityThread使用内部类:ApplicationThread与ActivityManagerService进行通信,

      ActivityThread将状态变化传递控制客户端Activity的状态执行;

       mActivities保存由ActivityStack所创建的ActivityRecord相关实例引用;

        

     

      借助网上一些达人的总结以及自己结合代码的分析,总结上述流程框架方面的东东;

    可能并不一定准确或存在漏洞,恳请达人指点多谢;

  • 相关阅读:
    转:MongoDB · 引擎特性 · journal 与 oplog,究竟谁先写入?
    Oracle 11g R2(11.2.0.4) RAC 数据文件路径错误解决--ORA-01157 ORA-01110: 数据文件
    Oracle 高可用作业测试
    Oracle 常见进程
    Mycat-server-1.6.5 常见分片方式
    转:三思!大规模MySQL运维陷阱之基于MyCat的伪分布式架构
    RabbitMQ 安装
    cmd 切换目录和配置环境变量和Curl批量执行Url
    sql中表变量
    Core 项目下使用SQl语句
  • 原文地址:https://www.cnblogs.com/daishuguang/p/3705786.html
Copyright © 2011-2022 走看看