android中组件生命周期的总结

1,activity

先看图:(此图来自网络,感谢分享者)


图示描述比较详细了,总结如下:

1,Android的生命周期共有:oncreate()--onstart()--onresume()----onpause()--onstop--ondestroy()........onrestart()这几个

2,oncreate()和ondestroy()是一对,分别是activity开启和销毁时调用的。(如finished 和按home或back键时)

3,onResume()和onPause()是一对,是临时的一个过渡阶段,分别是界面获得焦点和失去焦点是调用;onResume 可见, 可交互,onPause 部分可见, 不可交互 (比如上面弹出个电话)】(如当界面弹出一个dialog时是onPause(),或跳转到另一个activity时,会先执行这个回调onPause(),然后执行另一个activity的oncreat(),onResume(),onStart(),再执行这个activity的onstop(),此时是一种过渡状态,时间很短)

4,onstart()和onStop()是一对,是可见和不可见状态;onStart()后可见,但不可交互,只有onresume()获取焦点后才能交互,onstop()方法后,acitvity依然存在,只不过不可见,也不可交互;

5,onRestart()方法是在onstop()方法执行后,再重新回到界面时调用;如从A activity跳转到 B activity后,A 是onstop(),再按back键返回,A会执行onRestart();

6,acivity处于onStop()但由于内存原因,再后台被kill后,会重新进入oncreate()方法,

7,横竖屏切换时,默认会先执行onDestroy()然后再oncreat,避免此事发生引起的数据丢失:1,修改配置文件 中activity的configChanges值为"orientation"即可,2,禁止横竖屏切换:配置文件activity中android:screenOrientation设置为" portrait"(竖屏)或"landscape"(横屏)


2,service

先看图:(此图来自网络,感谢分享者)


service的生命周期有两条路径:

1,通过startService()开启service:

此时执行左边的路径---(onStartCommand方法可以被执行多次,但开启的是同一个service)

2,通过bindService()开启service:

此时执行右边的路径---(service只能与activity、service、contentProvider这三者绑定)

注意:如果先执行了startService(),再执行bindService(),(当然你也可以先绑定再开启,但其实单独只执行其中一个操作就可以开启这个service)路径二中的onCreate()方法将不会再次执行,因为同一个service只能被创建一次;

所以,一般我们会在onCreate()中完成初始化,在OnDestroy()中完成service残留资源的释放;

生命周期的结束同样对应两种方法:

1,通过startService()开启service,必须显示地通过stopSelf()或其他组件stopService()的方法结束

2,通过bindService()开启service,当所有绑定都解除时,会自动销毁该service;只有某个解绑时,service不会被销毁,重新绑定时调用onRebund();

拓展:service和acitivity之间的交互

1,在service中定义一个类,实现Ibinder接口,并在onBind()中return这个类的实例化对象;

2,在activity中定义一个类,实现ServiceConnection接口,覆写内部的两个方法,用来接收第一步返回的Ibinder对象;

3,在绑定acitivity和service时,bindService()需要传入这个ServiceConnection类的实例化对象和对应的service,此时将1-2步联系到一起;

此时第二步得到的Ibinder对象就可以在acitivity中调用service中的方法,实现交互;


3,fragment

先看图:(此图来自网络,感谢分享者)


fragment的生命周期比较多,有11个回调,但其实其复杂度却最小;

主要表现为:

1,小范围:onpause()   ====  onresume()  (如来电)

2,中范围:onpause()--onStop()  ==== onStart()--onResume()(如返回桌面再返回应用,屏幕息屏再解锁),跟acitvity时一致的;

3,大范围:onpause()--onStop()--onDestroyView()  ==== onCreatView()--onActivityCreated()--onStart()--onResume()(如切换到其他fragment,再切换回来(此处跟viewpager的缓存设置{-默认缓存3页fragment}也有一定的关系))

4,彻底:onpause()--onStop()--onDestroyView()--onDestroy()--onDetach()(退出应用,结束其所在的activity)

其他:

一般在oncreate中完成初始化;

主要操作在onCreateView()中执行,类似activity中onCreate中的操作;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值