关于Activity
做Android接触到最多的就是Activity,理解其生命周期对于编码的帮助很大:
帮助简化逻辑
数据传递过程清晰
处理特殊需求
一个Activity表示一个可视化的用户界面,可以称之为“活动”,使用setContentView(int layoutId)(一般执行在onCreate方法里)将需要显示的UI界面加载到这个Activity里面,实现Activity与用户的交互。
1、生命过程
onCreate(Bundle savedInstanceState) Activity创建,Bundle对象为当前Activity对象所保存的状态,此方法在Activity生命周期内只执行一次,可理解为Activity对象的创建过程。
onRestart 重启Activity,恢复显示,
Activity从后台隐藏状态转换到前台可见状态会被执行。
onStart Activity已经创建完毕,即将显示,用户看不到的。
onResume Activity已将可以显示了,并且用户可以与当前活动开始交互。
onPause Activity准备进入后台,一般用来处理离开当前活动时候的事情。
onStop Activity进入后台。
onDestroy Activity被销毁,当前活动停止,此方法只会执行一次。
2、区别特点
- onCreate一般完成正常静态设置,如创建视图、初始化控件、初始化数据、创建线程等操作。
- onStart是在活动变为可是状态之前调用,如果是前台接下来调用onResume,否则调用onStop。
- onResume活动与用户可交互前会调用到,其实是将一个Activity移动到栈顶。
- onPause和onStop与onStart和onResume是相互对应的关系。
- onDestroy与onCreate相对应,于Activity销毁时候调用到。
3、使用技巧
- activity的销毁原因会有多种,如自然销毁,系统回收等等,但是onPause方法却是唯一一个必定会在进程被杀死前被调用到的方法,所以相关的保存工作在这里完成比较好。
- onStart和onResume方法在活动每次进入前台时候都会调用到,所以不需要在里面完成视图和数据的初始化,但是可以进行视图或数据的更新操作,比如数据会在下一个Activity里面改变,再回到此活动时候更新。
另外需要注意的是只需要执行一次的操作(如启动一个线程),尽量不要放在这两个方法里面完成,尤其如果线程操作关系到c++之类的其他语言,因为c崩溃后JVM并不会检测到,只会再启动一遍,造成错误的结果。 - onPause 最重要的是用户所做的改变应该在这里提交,需要注意的是对于下一个启动的Activity来说,当前Activity必须执行完onPause方法才会执行onResume方法,也就是说当前的Activity准备隐藏工作完成之后下一个Activity才会准备显示,所以在这个方法里面不能执行过多的操作,尤其是耗时操作需尽量避免。