关于Android的组件和进程的理解


Android有四大组件,分别是Activity, Service, Broadcast Receiver和Content Provider,这四大组件是Android的核心部分。Android中组件与进程是相互独立的,当组件关闭的时候进程还可以继续存在。这样设计的妙处就在于当我们重新打开组件(比如一个Activity)时, Android系统会由于进程已存在从而无需重复创建进程,加快了APP的启动时间,优化了系统的资源利用。
在设计桌面程序的时候,一般会有一个程序入口,比如C语言程序的main入口,MFC程序的WinMain入口等。但是在android上面,程序的入口有所不同,组件就是程序的入口。你可以通过Broadcast Receiver接收到相应的广播后启动APP, 也可以点击桌面的快捷方式启动APP, 或者是通过后台Service启动相应的进程。按照Android设计的思路,当应用程序包含有多个组件的时候,是不能确定哪一个组件是程序的入口的,而且这些组件在某些情况下都可以作为程序的入口。组件和进程的相对独立可以带来更好的移动体验,使得进程对组件来说更加透明,也有利于程序的开发。但是这样做还有一个问题,既然组件和进程是相互独立的,那么由组件开启的进程是谁负责关闭或者维护呢?我们知道Android系统提供了一系列的系统服务和模块,正是这些服务和模块管理着组件的开启和关闭。
组件与进程之间, 组件与组件之间,进程与进程之间是怎么通信的呢?Android都是在OS这个级别里面提供一些支持,其中有一个很重要的服务-AMS,专门负责组件和进程的开启关闭。还有就是Binder IPC,这是Android系统里面一个很大的亮点,为组件提供一个很便捷、高效的机制,还有Low Memory Killer也是很重要的一个组件,主要负责杀进程。

下面简单做了一个例子。例子中主要由两个组件,FirstActivity和SecondActivity, 通过设置每个Activity的andrpid:process属性,可以让这两个租金分别开启两个不同的进程。当然两个组件也可以运行在同一个进程里面,这样可以看出开启进程的数目与组件之间没有必然的关系,所谓是相互独立的。



这时可以看到系统中已经开启了两个进程:



当关闭SecondActivity时,其对应的进程依旧没有关闭。也就是组件消失了,但是进程还在,方便下次开启时快速启动。同样,如果SecondActivity在最上面,我们这时关闭com.example.hello进程后,按一下手机的back键或者是点击SecondActivity中的“Finish Activity”按钮,可以发现其对应的FirstActivity并没有消失。这时优惠重新创建新的进程(com.example.hello)。说明组件和进程之间是相互独立的。

更多相关文章

  1. android进程创建分析
  2. 详解 Android(安卓)的 Activity 组件
  3. Android(安卓)内存管理
  4. Android的dumpsys命令
  5. Android布局 android:gravity 和 android:layout_Gravity一些细
  6. Android根文件系统的启动过程
  7. Android跨进程通信IPC
  8. 【译】Google官方推出的Android架构组件系列文章(五)ViewModel
  9. 【Android】进程与线程基本知识

随机推荐

  1. 收集android的三个小tip
  2. Android中VectorDrawableCompat的使用注
  3. 自动启动程序
  4. android命令详解
  5. android dumpsys
  6. ok6410 android driver(4)
  7. android全屏无标题
  8. 让Android支持透明状态栏
  9. android 自定义主题样式
  10. android笔记