生命周期这东西其实是最开始接触Android的时候就提到的,Activity最常用,它的生命周期也就用的滚瓜烂熟了,Fragment在我们公司的项目中使用的比较少,用到的地方也就最简单的展示了下布局,加载了下数据而已,这些天突然发现对它的生命周期记忆有些模糊了,默默整理下。
Activity生命周期
https://developer.android.com/reference/android/app/Activity.html
onCreate():Activity第一次启动时执行;
onStart():Activity处于可见状态的时候执行;
onResume():Activity可以得到用户焦点的时候执行;
onPause():Activity可见但失去焦点的时候执行;
onStop():Activity处于不可见状态的时候执行;
onRestart():Activity没有被销毁的时候重新调用这个Activity的时候执行;
onDestory():Activity被销毁的时候执行;
Fragment生命周期
https://developer.android.com/reference/android/app/Fragment.html
https://developer.android.com/guide/components/fragments.html
onAttach():Fragment和Activity完成绑定;
onCreate():初始化Fragment,只调用一次;
onCreateView():初始化Fragment的布局;
onActivityCreated():Activity的onCreate方法执行完后调用;
onStart():Fragment可见时执行;
onResume():Fragment可获取焦点时执行;
onPause():Fragment可见但失去焦点时执行;
onStop():Fragment不可见时执行;
onDestoryView():Fragment布局被移除,但未与Activity解除绑定;
onDestory():销毁Fragment;
onDetch():解除与Activity的关联;
小注意点:
onCreate():可初始化一些变量,可通过savedInstanceState获取之前保存的数据;
onCreateView():该方法需要返回布局view,尽量不要做耗时操作;
onActivityCreated():已与Activity绑定,可进行与Activity交互的UI操作;
onDestoryView():Fragment布局被移除,但依然与Activity关联,使用中需注意重复加载view的情况;
例:ViewPager+Fragment
ViewPager每次加载3页,当加载超过3页时,之前的页面会执行onDestoryView,但未执行onDestory,重新回到那一页时又执行onCreateView,为避免重复加载view,可加如下代码:
@Override
public void onDestroyView() {
if(view!=null){
((ViewGroup)view.getParent()).removeView(view);
}
super.onDestroyView();
}
与Activity生命周期比较
Service生命周期
https://developer.android.com/guide/components/services.html
https://developer.android.com/guide/components/bound-services.html
1、startService()启动:
该方式启动的service可无限运行下去,需调用stopSelf()或调用stopService()停止。当系统资源不足时,Android系统也可能结束服务。
onCreate():初始化,只被调用一次;
onStartCommand():通过startService()启动服务时系统都会调用此方法,接受Intent数据;
onDestory():服务不再使用且被销毁,系统调用此方法;
2、bindService()启动:
该方法启动时,客户可通过IBinder接口与service进行通信,可通过unbindService()关闭连接。一个service可以同时与多个调用者绑定,当所有调用者都解除绑定后销毁service。
onCreate():初始化,只被调用一次;
onBind():bindService()与服务绑定时调用该方法,返回一个IBinder接口让调用者与服务进行通信;
onUnbind():unbindService()解除绑定后执行;
绑定服务的生命周期
如果单纯是绑定服务,由Android系统控制生命周期;
如果实现了onStartCommand()回调方法,需通过stopSelf()或stopService()停止服务;
当系统调用onUnbind()方法时,如果服务已启动并接受绑定,并想在客户端下一次绑定到服务时接受obRebind()调用,onUnbind()方法返回true。onRebind()返回空值,客户端仍在onServiceConnected()回调中接受IBinder。