Android 是用过使用栈来管理活动的,所以最先显示的和销毁的是栈顶活动。所以当所写的Activity可见时,其必然处在栈顶。
启动一个Activity最先调用的是
onCreate()方法,在该方法中会完成活动的初始化操作,比如加载布局,绑定事件等,不过尽量避免在该方法中做很多事,否则可能将导致程序启动很久都看不到界面。
进行初始化之后,活动将由不可见变为可见,此时调用的是
onStart()方法,在每次Activity可见之前都会调用该方法。
不过onCreate()方法和onStart()方法很快都会被切换掉,因为在Activity中只有三个静态方法可以存在比较长时间,这三个方法就是接下来将会依次被调用的
onResume(),onPause(),onStop()。
onResume()是当活动准备和用户交互时被调用的,这个时候活动肯定返回到栈顶,并处于运行状态(也被理解为"Running"状态)。
onPause()是当系统准备去启动或则恢复另一个活动时调用的,此时不会再接受用户的输入且不执行任何代码,但是不代表后台线程不工作,活动处于半透明状态。为了切换得流畅,要在此方法中进行一些资源的关闭(例如关闭相机),但如果活动执行完onPause()还会执行onStop(),此时就不要在onPause()中执行太多操作而是改为在onStop()中去执行,并且在onStop()中的资源要在onStart()中恢复。
执行onPause()时活动还是处于半透明状态的,当活动变为完全不可见时会调用onStop()方法,当启动的新活动是一个对话框时onPause()会被执行而onStop()不会被执行,在调用onStop()之前一定会调用onPause()。
调用onStop()之后活动会处于停止状态,但是即使进入了停止状态,系统会保存View对象的状态(比如EditText的文字)到一个Bundle中,并在用户返回这个Activity时恢复他们。
活动在被销毁前调用onDestroy(),在该方法要将在onCreate()中开启的后台进程杀死,避免资源泄露。
onRestart()只有当活动被重新启动时才会调用该方法。
下面图标可以帮助理解: