美文网首页
数据保存与数据恢复

数据保存与数据恢复

作者: 背影杀手不太冷 | 来源:发表于2016-06-24 10:27 被阅读27次

标签(空格分隔): 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都不会再执行!!

相关文章

网友评论

      本文标题:数据保存与数据恢复

      本文链接:https://www.haomeiwen.com/subject/piyodttx.html