一个安卓应用程序里的所有进程可以分为五类(按重要程度递减排列):
前台进程:显示在屏幕中、正在与用户进行直接交互的进程,具有焦点,一般不会被系统释放掉。
可见进程:同样显示在屏幕中,但是并没用和用户进行直接交互,比如一个进程运行时弹出了一个对话框,用户在和对话框进行交互的时候,这个进程就变为可见进程。
服务进程:拥有service服务的进程,一般在后台为用户服务,比如音乐播放器的播放。在系统内存接近崩溃,为了使前台进程可以继续工作时会将此类进程释放。
后台进程:对用户作用不大,内存接近崩溃时很大几率会中断此类进程。
空进程:为缓存机制而存在,对用户没有意义,释放内存时的首选。
下面对Activity的各种状态与方法进行整理说明:
上图中七个矩形代表在Activity中会被系统自动调用的方法,带底色的圆角矩形代表Activity的重要状态。
一个Activity在第一次运行的时候,会依次调用onCreate(),onStart(),onResume()三个方法,区别于其他两个方法的是,onCreate()方法只会被调用一次,而onStart(),onResume()会伴随着Activity状态的切换进行多次调用。
一个Activity在前台运行时,可能会被其他突发事件遮挡而进入pause状态,比如玩游戏时突然来了一个电话,或者应用程序弹出对话框等。只要这个Activity没有获得焦点,但又是一个可见进程时,它就处于pause状态,进入pause状态时,系统会自动调用onPause()方法。当Activity重新获得焦点时,会自动调用onResume()方法。
而当一个Activity被彻底阻挡,不再出现在屏幕中时,比如用户按下了Home键,onStop()方法就被调用,进入停止状态。在onStart()和onStop()之间的状态Activity都是可视的。在这两个方法之间可以保持需要的资源,这些资源通常在onStop()方法中释放。
最后一个Activity被销毁时,onDestroy()方法被调用,释放所有资源。