Activity的生命周期方法:
第一次运行程序时调用的生命周期方法为:
onCreate()— onStart()—onResume()。
退出程序时调用的生命周期方法为:
onPause()—onStop()—onDestory()。
onCreate创建与onDestroy销毁
onStart(界面可见)与onStop(界面不可见)
onResume可编辑(即获得焦点,可以与用户交互)与onPause不可编辑(界面可见,但失去焦点,不可与用户交互)
onCreate():
- 加载UI
- 不要做阻塞主线程(UI线程)的任何事情,可以用子线程来做启动时需要的费时操作。
- 尽量少做动画
- 对于布局比较复杂的时候,可以考虑不要一次性全部加载上,动态加载是一个好的办法
- 子类在重写onCreate()方法的时候必须调用父类的onCreate()方法,即super.onCreate(),否则会抛出异常。
onPause()
停止动画或者是其他正在运行的操作;提交在用户离开时期待保存的内容(例如邮件草稿);释放系统资源,例如broadcast receivers, sensors (比如GPS), 或者是其他任何会影响到电量的资源。
onResume()
实现onResume()来初始化那些在onPause方法里面释放掉的组件,并执行那些activity每次进入Resumed state都需要的初始化动作
onStart()
作为onStop()所对应方法,在onStop里面做了哪些释放资源的操作,就该在onStart里面把那些资源重新创建出来。
onStop()
极端情况下,系统会直接杀死我们的app进程,并不执行activity的onDestroy()回调方法, 因此可以使用onStop()来释放所有activity占有的资源,从而避免内存泄漏。
一个app可能有多个Activity
App进程死亡,则app占用的所有资源都会被释放
手机横竖屏切换:
系统会根据AndroidManifest.xml文件中Activity的configChanges属性值的不同而调用相应的生命周期方法。
没有设置configChanges属性的值时:
当由竖屏切换横屏时,调用的方法依次是onPause()、onStop()、onDestory()、onCreate()、 onStart()和onResume()的方法。
设置configChanges属性
打开程序时同样会调用onCreate()— onStart()—onResume()方法,但是当进行横竖屏切换时 不会再执行其他的生命周期方法。
<activity android:name=".MainActivity"
android:configChanges="orientation|keyboardHidden">
如果希望某一个界面一直处于竖屏或者横屏状态,不随手机的晃动而改变,可以在清单文件中通过设置Activity的screenOrientation属性完成
竖屏:android:screenOrientation="portrait"
横屏:android:screenOrientation="landscape"