FrameWork 之 Activity

作者: UniGenius_Mx | 来源:发表于2016-03-03 01:08 被阅读72次

    Activity 与普通类 有什么区别?

    Activity生命周期本质

    Activity在AMS中的处理逻辑(Activity Manager Service)

    ActivityThread是什么?
    ActivityThread 是运行在 Activity主线程中的一个普通的java类.本身不是一个线程
    在主线程方法中运行---->调用ActivityThread main()方法
    (消息队列准备, 启动)
    ActivityThread 源码分析

    main()

    Looper.prepareMainLooper();//准备消息队列
    
    public static void prepareMainLooper(){
     prepare(false);
     :
     :
     :
     .......
    }
    
    private static void prepare(boolean quitAllowed){
     if(sThreadLocal.get()!=null){
       throw new RuntimeException("Only one Looper may be created per Thread");
       sThreadLocal.set(new Looper(quitAllowed);//创建一个消息队列
     }
    }
    //可以看出这一步主要是创建一个消息队列
    

    Looper.loop()

    开始循环处理消息

    Thread.attach

    主要处理和AMS的交互,通信

    private void attach(boolean system){
      //ActivityManagerNative是AMS的远程代理对象,因为AMS在一个单独的线程当中    代理模式?
      final IActivityManger mgr= ActivityManagerNative.getDefault();  
    
      try{
          mgr.attachApplication(mAppThread);//ApplictionThread类  调用远程binder文件 传输数据
      }catch(){}
    }
    

    ApplicationThread

    private class ApplicationThread extends ApplicationThreadNative{
    //往下看下继承的类
    }
     public  abstract class ApplicationThreadNative extends Binder implements IApplication
    //和AMS 通信的一个 Binder的具体实现类
    处理具体的逻辑,在ActivityThread中初始化
    
    

    ActivityClientRecord

    定义Activity的描述的记录,配置信息,Window等等等等..

    Context是什么 --环境 相关资源

    本身是一个接口.

    Paste_Image.png
    Activity extends ContextThemeWrapper //Activity是Context的一个实现类
    public abstract class Context{
        //定义了一些 Acitity所需资源/方法
    }
    
    ContextWrapper  extends Context{  //具体实现
    Context mBase;
    public ContextWrapper(Context base){//传进来mbase
       mbase = base;
    }
        //for example
      @override
       public Resources getResources(){
          return mBase.getResources();
      }
    }
    
    //mbase 是Context的具体实现类
    class ContextImp extends Context{
    
    }
    

    Activity与其他类有什么不同

    控制界面的显示,由FrameWork统一处理和管理. 本质与其他类相同同

    Activity 生命周期

    ActivityThread 控制Activity生命周期一些方法回调,具体回调由AMS跨线程通信回调(结合前文理解)
    ActivityThread中的一个成员变量H

    Paste_Image.png

    处理AMS跨线程通信的具体逻辑

    Activity生命周期具体回调

    Instrumentation

    本质:负责打开Activity的生命周期方法/创建Application对象 /启动Activity
    for example:
    startActivity();
    startActivityForResult();最终都是调用此类
    本质:辅助AMS管理Activity生命周期

    ActivityManagerNative

    本质:辅助AMS与客户端跨线程交互(结合前文理解)

    H类 H extends Handler

    本质:处理AMS发送过来的具体消息 (看图片)

    框架层学习笔记,仅供参考,代码为手打,错误之处烦请指正,欢迎交流 qq:11417998

    相关文章

      网友评论

        本文标题:FrameWork 之 Activity

        本文链接:https://www.haomeiwen.com/subject/rmwnkttx.html