标签(空格分隔): Android
Activity##
参考博客
activity变得“容易”被系统销毁时,该activity的onSaveInstanceState就会被执行,除非该activity是被用户主动销毁的,例如当用户按BACK键的时候。
只要记住只有用户主动点击back键或者说主动调用finish()方法时,才不会调用onSaveInstanceState()方法,无论是什么其他的情况都会调用onSaveInstanceState()方法
临时数据使用 onSaveInstanceState 保存恢复,永久性数据使用 onPause 方法保存。但是onPause方法不能做大量的操作,这会影响下一个Activity入栈。可以坐下简单的数据库保存工作,但是不能大量
问题:为什么要选择在onPause保存永久数据而不是在onStop呢?###
因为论出现怎样的情况,比如程序突然死亡了,能保证的就是onPause方法是一定会调用的,而onStop和onDestory方法并不一定,所以这个特性使得onPause是持久化相关数据的最后的可靠时机。当然onPause方法不能做大量的操作,这会影响下一个Activity入栈。
当我还没有自学Android时,玩着一些APP就会产生一个疑问,比如我在一个输入框中输入了大量文字没有提交或者保存。此时来了一个电话,如果退回的时候,输入框里面的文字消失了,那我可能会砸了电话,所以这个保存数据的操作,是Android开发者做的吗?
然而是不需要的,因为Android的View本身自己就实现了onSaveInstanceState方法,这些控件自己就具有保存临时数据和恢复临时数据的能力。
其他View控件都有相似的实现原理。值得一提的是,只有当你给这个wiget在xml中指定id时,它才具有保存数据并且恢复的能力,并且不同的wiget还不能共用这个id,否则会出现数据覆盖的情况。
此处输入图片的描述因为vedioView只会保存当前的播放画面?而不会保存进度数值?
Fragment##
参考博客
跟activity的区别
1、fragment的返回栈只有一个fragment时:
保存临时数据时,用onSaveInstanceStateS(),保存永久数据时,用onPause()。恢复数据用onCreateView(),而不是用onCreate()喔!
2、fragment的返回栈有多个fragment时:
保存临时数据时,不能用onSaveInstanceStateS(),而是用onDestoryView(),因为在返回栈有多个fragment时onSaveInstanceStateS()无论怎样都不会被调用到;保存永久数据时,用onPause()。恢复数据用onCreateView(),而不是用onCreate()喔!
当fragment任务栈中有多个fragment时,进入下一个fragment时,并不会销毁fragment实例,而是仅仅销毁视图,最终调用的方法为onDestoryView。剩下的onDestory与onDetach都不会再执行!!
网友评论