Activity 主要是用来和用户交互的,所以是否获得焦点与是否可见是理解Activity 生命周期的关键。
一共有 七个生命周期方法,如下:
整个生命周期 :开始于 onCreate,结束于 onDestory。
可见生命周期: 开始于 onStart,结束于 onStop。
获得焦点的生命周期: 开始于 onResume,结束于 onPause。
上面已经有 三对生命周期方法,还有一个 onRestart,是在onStop调用后,这个Activity由回到前台时调用的。即 onStop --> onRestart --> onStart。
在onResume里启动线程,在onPause里停止线程。
在onResume里注册广播,在onPause里取消注册。
所有的Activity必须实现onCreate(Bundle)函数来进行初始化;也可能实现onPause()函数来提交数据的变化。
不是生命周期方法,但是也是很重要的方法:onNewIntent
当该Activity的启动模式是 singleTask 或者 singleInstance 时,如果这个Activity有存在的实例,再次进入时不是调用 onCreate,而是 onNewItent。
可以是onPause --> onNewIntent --> onResume
也可能是 onStop --> onNewIntent --> onRestart --> onStart --> onResume
注:四种模式
standard 标准模式默认加载模式
singleTopTask 顶单例模式在栈顶是不会新建
singleTaskTask 内单例模式该Task中这个Activity只有一个实例且始终在栈底,允许其他Activity存在
singleInstance全局单例模式该Task中有且只有这个Activity的这一个实例。
其它:
onSaveInstanceState()
总而言之,onSaveInstanceState()的调用遵循一个重要原则,即当系统存在“未经你许可”时销毁了我们的activity的可能时,则onSaveInstanceState()会被系统调用,这是系统的责任,因为它必须要提供一个机会让你保存你的数据(当然你不保存那就随便你了)。如果调用,调用将发生在onPause()或onStop()方法之前。(虽然测试时发现多数在onPause()前)
onRestoreInstanceState()
onRestoreInstanceState()被调用的前提是,activity A“确实”被系统销毁了,而如果仅仅是停留在有这种可能性的情况下,则该方法不会被调用,例如,当正在显示activity A的时候,用户按下HOME键回到主界面,然后用户紧接着又返回到activity A,这种情况下activity A一般不会因为内存的原因被系统销毁,故activity A的onRestoreInstanceState方法不会被执行 此也说明上二者,大多数情况下不成对被使用。
onRestoreInstanceState()在onStart() 和 onPostCreate(Bundle)之间调用。
onSaveInstanceState()方法的默认实现
如果我们没有覆写onSaveInstanceState()方法, 此方法的默认实现会自动保存activity中的某些状态数据, 比如activity中各种UI控件的状态.。android应用框架中定义的几乎所有UI控件都恰当的实现了onSaveInstanceState()方法,因此当activity被摧毁和重建时, 这些UI控件会自动保存和恢复状态数据. 比如EditText控件会自动保存和恢复输入的数据,而CheckBox控件会自动保存和恢复选中状态.开发者只需要为这些控件指定一个唯一的ID(通过设置android:id属性即可), 剩余的事情就可以自动完成了.如果没有为控件指定ID, 则这个控件就不会进行自动的数据保存和恢复操作。
更新UI
在 Handler 中可以直接更新,在 BroadcastReceiver 中也可以,所以线程可以用 Handler 或者 发送广播来更新。
线程队列中执行的线程是没有新开线程的,只是在UI主线程中调用了其中的run方法而已。