不要在Android的Application对象中缓存数据
来源:互联网 发布:无尺度网络专题 有图 编辑:程序博客网 时间:2024/05/13 22:28
虽然
- 众所周知,在android应用中,Application的生命周期是和整个应用一致的,只要应用没有被系统回收,这个Application对象就会一直存在。
- 在实际的开发过程中,我们经常要保存很多的临时数据,比如:某些可以被多个界面共同编辑的变量。这时,我们就会想:我能不能在某个地方保存这个变量,使我这个变量能被所有界面访问。对,聪明的你应经猜到了:使用Application。
但是
这个Application对象并不是始终在内存中的,它有可能会由于系统内存不足而被回收。但Android在你重新打开这个应用时并不是重新开始启动这个应用,它会创建一个新的Application对象并且启动上次用户离开时的activity以造成这个app从来没有被kill掉的假象。
* 这样,你之前缓存的数据都会重新初始化!!!这个问题是非常严重的。
* 并不仅仅只有Application对象是这样的,其它的单例或者公有静态类也有可能会由于系统内存而被杀掉
怎么测试
1.在android studio上,你可以通过Terminate Application来结束当前应用:
2.也可以通过切换系统语言来达到”重启”Application的目的
发现
测试过程也发现,应用被系统回收后,再次进入应用时,会尝试恢复本来的界面,比如:原来界面有一个EditText,系统在回收应用时会保存里面的文字,在恢复的时候重置设置给EditText。
方案
为了避免应用被系统回收后再次回到应用恢复应用时出现的一系列问题(如Fragment未add无法使用getString等方法、重新恢复EditText触发焦点变化等),通常在自定义的Application类中实现Thread.UncaughtExceptionHandler接口,在它的uncaughtException方法中进行界面的跳转(由于是在Application类中,所以这里的跳转是打开一个界面而已,通常是应用的主界面),并kill掉之前的程序,这样所有的资源都会随着用户的构造而重新生成。
0 0
- 不要在Android的Application对象中缓存数据!
- 不要在Android的Application对象中缓存数据!
- 不要在Android的Application对象中缓存数据!
- 不要在Android的Application对象中缓存数据!
- 不要在Android的Application对象中缓存数据
- 不要在Android的Application对象中缓存数据!
- 不要在Android的Application对象中缓存数据!
- 不要在Android的Application对象中缓存数据!
- 千万不要在Android的Application对象中缓存数据!
- 不要在Android的Application对象中缓存数据!
- 不要在Android的Application对象中缓存数据
- 【Android】不要在Application对象中缓存数据!
- 【Android】不要在Application对象中缓存数据!
- 不要在Android的Application对象里存储数据
- Android开发之千万不要把数据存储在Application对象中
- ASP中使用APPLICATION对象存储数据的缓存类
- 在Android中不要将数据存储在Application类中,
- Android中的Application对象里尽量不要存储数据
- 怎么拿到当前页面的锚点
- Jsp动态网站初步项目 --简单的商品浏览页面(ItemDAO业务逻辑类)
- 求矩阵的1,和2范数
- c3p0详细配置
- Android,DataBinding的官方双向绑定
- 不要在Android的Application对象中缓存数据
- tomcat+eclipse web应用开发环境配置
- 如何解决placeholder的兼容性
- 仿雅虎视频加载动画
- 洛谷 P2850 [USACO06DEC]虫洞Wormholes
- js方法传递包含反斜杠\的参数时,会把\过滤掉
- euler欧拉函数学习入门
- caffeonspark
- 模拟退火