安卓应用程序的生命周期

(1)前台(Foreground)进程
与用户当前正在做的事情密切相关,不同的应用程序组件能够通过不同的方法使它的宿主进程移到前台。当下面任何一个条件满足时,都可以考虑将进程移到前台。
进程正在屏幕的最前端运行一个与用户交互的Activity(它的onResume()方法被调用);
进程有一个正在运行的BroadcastReceiver(它的BroadcastReceiver.onReceive()方法正在执行);
进程有一个Service,并且在Service的某个方法(Service.onCreate()、Service.onStart()或者Service.onDestroy())内有正在执行的代码。
(2)可见(Visible)进程
它有一个可以被用户从屏幕上看到的Activity,但不在前台——其onPause()方法被调用。例如:如果前台的Activity是一个对话框,以前的Activity隐藏在对话框之后,就可能出现这种进程。这样的进程很重要,一般不允许被杀死,除非为了保证前台进程的运行不得不这样做。

(3)服务(Service)进程
有一个已经用startService() 方法启动的Service,虽然这些进程用户无法直接看到,但它们做的事情却是用户所关心的(例如:后台MP3回放或后台网络数据的上传/下载)。因此,系统将一直运行这些进程,除非内存不足以维持所有的前台进程和可见进程。
(4)后台(Background)进程
拥有一个当前用户看不到的Activity(它的onStop()方法被调用),这些进程对用户体验没有直接的影响。如果它们正确执行了Activity生命周期,系统可以在任意时刻杀死进程来回收内存,并提供给前面3种类型的进程使用。系统中通常有很多这样的进程在运行,因此要将这些进程保存在LRU 列表中,以确保当内存不足时用户最近看到的进程最后一个被杀死。
(5)空(Empty)进程
不包含任何处于活动状态的应用程序组件。保留这种进程的唯一原因是,当下次应用程序的某个组件需要运行时,不需要重新创建进程,这样可以提高启动速度。
以上所说的“进程”是从系统运行的角度考虑的,各种不同的进程可以理解成Android的各种组件的不同状态机(state machine)。如果从应用程序的代码以及运行情况考虑,可以关注Android的各种组件相对应的生命周期。

posted on 2015-04-21 23:39  黎木  阅读(402)  评论(0编辑  收藏  举报

导航