您的位置:首页 > 其它

activity以及fragment的生命周期

2015-08-02 16:15 309 查看
参考以下几篇博文
http://blog.csdn.net/liuhe688/article/details/6733407 http://www.cnblogs.com/mybkn/articles/2455142.html http://blog.csdn.net/qianfu111/article/details/8948110 http://my.oschina.net/yidinshi/blog/125362 http://www.php100.com/html/it/biancheng/2015/0120/8419.html http://blog.csdn.net/lmj623565791/article/details/37970961
1. activity的生命周期:

加载数据--可见不可交互--可见可交互--可见不可交互--不可见不可交互--释放资源

onCreate() 创建,加载布局,初始化一些图片或者媒体数据

onStart() 让程序可见,但是还不能操作

onResume() 可操作状态,获取焦点,恢复动态刷新的任务, 让用户去查看

此时程序真正可执行~

onPause() 可看到 但是无法操作,实质是让程序失去焦点,把界面上一些动态正在刷新的任务, 给停止, 释放cpu使用率

onStop() 被覆盖 完全看不到 ,让程序不可见

onDestroy() 当程序退出时,让程序销毁,释放一些耗内存的资源

onRestart() 一般是当前activity被完全覆盖不可见后,重新可见,也就是说,onStop()-onRestart-onStart

如果被覆盖但是还能看见,也就是说onPause,可以直接调用onResume

另外一些特殊情况下,比如内粗不够,activity被干掉,可能是onPause或者onStop-killed-onCreate

几个特殊的方法

finish() 结束一个Activity的生命周期

而onDestory()方法则是Activity的一个生命周期里的方法,其作用是在一个Activity对象被销毁之前,释放此Activity之前所占用的资源,释放了资源之后就只能再去create了,而不能直接resume

onWindowFocusChanged方法:在Activity窗口获得或失去焦点时被调用,例如创建时首次呈现在用户面前;当前Activity被其他Activity覆盖;当前Activity转到其他Activity或按Home键回到主屏,自身退居后台;用户退出当前Activity。以上几种情况都会调用。

这个方法在某种场合下还是很有用的,例如程序启动时想要获取视特定视图组件的尺寸大小,在onCreate中可能无法取到,因为窗口Window对象还没创建完成,这个时候我们就需要在onWindowFocusChanged里获取

onSaveInstanceState:(1)在Activity被覆盖或退居后台之后,系统资源不足将其杀死,此方法会被调用;(2)在用户改变屏幕方向时,此方法会被调用;(3)在当前Activity跳转到其他Activity或者按Home键回到主屏,自身退居后台时,此方法会被调用。

第一种情况我们无法保证什么时候发生,系统根据资源紧张程度去调度;第二种是屏幕翻转方向时,系统先销毁当前的Activity,然后再重建一个新的,调用此方法时,我们可以保存一些临时数据;第三种情况系统调用此方法是为了保存当前窗口各个View组件的状态。onSaveInstanceState的调用顺序是在onPause之后,onstop之前。换句话说我们可以在onpause里保存一些临时数据

onRestoreInstanceState:(1)在Activity被覆盖或退居后台之后,系统资源不足将其杀死,然后用户又回到了此Activity,此方法会被调用;(2)在用户改变屏幕方向时,重建的过程中,此方法会被调用。我们可以重写此方法,以便可以恢复一些临时数据。onRestoreInstanceState的调用顺序是在onStart之后。

2.fragment

Activity直接影响它所包含的fragment的生命周期,所以对activity的某个生命周期方法的调用也会产生对fragment相同方法的调用。例如:当activity的onPause()方法被调用时,它所包含的所有的fragment们的onPause()方法都会被调用。

Fragment比activity还要多出几个生命周期回调方法,这些额外的方法是为了与activity的交互而设立,如下:

onAttach():当fragment被加入到activity时调用(在这个方法中可以获得所在的activity)。

onCreateView():当activity要得到fragment的layout时,调用此方法,fragment在其中创建自己的layout(界面)。

onActivityCreated():当activity的onCreated()方法返回后调用此方法。

onDestroyView():当fragment的layout被销毁时被调用。

onDetach():当fragment被从activity中删掉时被调用。



一旦activity进入resumed状态(也就是running状态),你就可以自由地添加和删除fragment了。因此,只有当activity在resumed状态时,fragment的生命周期才能独立的运转,其它时候是依赖于activity的生命周期变化的。

3. fragment的hide、show方法

hide是隐藏,东西还在,用的时候show出来即可

比如:我在FragmentA中的EditText填了一些数据,当切换到FragmentB时,如果希望会到A还能看到数据,则适合你的就是hide和show;也就是说,希望保留用户操作的面板,你可以使用hide和show,当然了不要使劲在那new实例,进行下非null判断。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: