Framework运行环境综述

1、android整体架构:


Framework定义客户端和服务端的组件和接口:主要包括三个部分

1、 服务端 分别是WindowManagerService(Wms),ActivityManageService(Ams)其中Ams管理所有应用程序中的Activity
2、 客户端
ActivityThread类,Activity类,PhoneWindwo类,Window类,DecorView类,ViewRoot类等
3、Linux驱动

2、Activity之间如何传递数据

所谓传递数据或者消息,一般指的是在多个线程之间,而Activity本身并不是线程。ActivityThread才是一个java类,它与线程之间没有关系,就好像我们定义一个苹果类,橘子类一样。

  • 方法1:可以先实例化某一个类,获得该类的引用,使用时通过引用去访问类的内部数据。
  • 方法2:对于A,B之间可以先实例化C,然后A,B把需要传递的数据存入到C,然后从C中取出。

Activity类的实例化是由Framework完成的,我们只使用startActivity方法告诉Framework去运行哪个Activity,这意味着我们得不到Activity的引用,那么就不能直接访问对象的内部数据。解决办法是使用
Activity,getApplication()方法,该方法返回一个Application对象,该Application对象在该程序中是唯一的,所有程序中的不同Activity返回的Application对象是相同的,对象的名称可以在AndroidMainfest_xml文件中指定,一旦获取到Application对象,就可以借助该对象在不同的Activity中传递数据。

除此之外,Framework本身也提供了标准的Activity之间传递数据的方法,Intent该类做为startactivity()中的一个参数。用于在启动Activity时传递给目标Activity。

3、一个Activity的启动过程(从linux内核到Framework层)


1、最底层的是内核,内核将读取init.rc文件,并启动该文件中定义的各种服务。

2、系统中运行的第一个Dalvik虚拟机程序叫做zygote。英文是“卵”的意思,接下来所有的Dalvik虚拟机进程都是通过这个“卵”孵化出来的。

3、然后到Dalvik VM。当java程序运行时,都是由java虚拟机来解释java的字节码。它将这些字节码翻译成本地CPU的指令码。Dalvik VM其实和这一样。Dalvik VM的作用就 是创建一个虚拟机并执行参数中指定的java类。

4、SystemServer进程的启动。SystemServer是zygote启动的第一个进程。这个进程在Android的运行环境中扮演了“中枢神经”的作用。APK应用中能够直接交互的大部分系统服务都在该进程中运行。

5、启动各种系统服务和线程。SystemServer启动后,常见的像WindowManagerServer(Wms),ActivityManagerService(Ams),PackageManagerServer(Pms)等,这些系统服务都以一个线程的方式存在于SystemServer进程中。

6、启动第一个Activity。当以上线程都启动后,其实Asm将调用

mMainStack.resumeTopActivityLocked(null)

由于系统刚刚启动,mMainStack中没有任何Activity对象,因此调用
startHomeLocked()函数。从这样看来,开机后系统从哪个 Activity开始执行完全取决于mMainStack中的第一个Activity的对象。
在Ams的startHomeActivityLocked()中,系统发出一个catagory的字段CATEGORY_HOME的Intent

intent.setComponent(mTopComponent)if(mFactoryTest!=SystemServer.FACTORY_Test_LOW_LEVEL){      intent.addCategory(Intent.CATEGORY_HOME)}

无论哪个应用程序,只要声明自己能够响应的intent,那么就可以认为是Home程序。这是是android中为什么会存在各种所谓的“Home程序”的原因,系统并没有给任何程序赋予“Home”特权,而把这个特权交给用户。
这就是第一个Activity的启动过程。

更多相关文章

  1. android 多线程下载 显示进度 速度
  2. Android获取LayoutInflater对象的方法总结
  3. Rxjava的基础用法和源码解析(一)
  4. Android类参考---Fragment
  5. Handler:使用方式
  6. 将图片存储到Sqlite和取出
  7. Android中设置启动动画
  8. Android(安卓)绘制一个Loading动画__向图片中缓慢填充颜色,从而
  9. Android(安卓)DDMS ADB启动失败错误解决!

随机推荐

  1. 【Android信息安防】三星KNOX容器(1)
  2. Android(安卓)自定义View实现动画效果切
  3. Android(安卓)Handler机制不一样角度去理
  4. 移动互联网和Android给你带来的机会[轉]
  5. Android学习记录(4)—在java中学习多线程下
  6. android ndk生成第三方库的so方法(ndk-bu
  7. android获取手机号码与IMEI码
  8. 安卓AVD使用建议
  9. Android(安卓)Studio打不开,无法启动,无反
  10. Android(安卓)UI秘笈:谨记该做什么不该做