【笔记】Activity、Fragment、Service生命周期梳理

生命周期这东西其实是最开始接触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。




猜你喜欢

转载自blog.csdn.net/q1113225201/article/details/76595460