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中的操作;