在Android系统中,应用可以是多进程的。这在移动端操作系统中应该是非常高级的设计了,很多移动端操作系统、嵌入式系统都是不支持的。多进程程序给程序设计带来了很有优点,也带来更多的复杂性。
Android系统中的“四大组件(Activity,Service,Receiver,Provider)”全都是可以跨进程通信的组件(下文中的组件指的都是这些组件)。每个组件都可以在AndroidManifest中配置到一个指定的进程。Android系统其实不允许应用自己管理自己进程的生命周期。但是由于我们只要Start一个Intent启动属于那个进程的组件,就能启动那个进程。再用Java一般的进程操作API,比如System.exit()
方法就能杀死一个进程。由于这些很容易做到的特点,让很多Android开发以为自己可以管理进程。实际上这样理解Android进程是不对的。Android系统对进程的设计是这样的,系统收到需要用到某个组件的请求时(比如start Activity或bind Service),就会检查这个组件在AndroidManifest中注册的进程是否已经启动了。如果这个进程还没有启动,系统就会首先启动这个进程,然后构造一个应用注册的Application对象,调用Application对象的attachBaseContext()
方法。然后构造所有注册了应该在这个进程的ContentProvider,初始化它们,调用它们的onCreate()
方法。确保后面所有组件,包括还没有被调用的Application对象的onCreate()
方法都能正常使用这个进程的所有ContentProvider。然后再调用Application对象的onCreate()
方法。最后才开始初始化本来需要用到这个进程的组件。