记录一下前些天在编程中解决的一个问题,而这个问题只会发生在程序打包成APK后运行时,而在虚拟机上调试或直接取项目bin目录下的apk运行一切正常。
问题:
我写的一个应用,会在程序开始运行时,读取SD中的一个XML文件,界面上会显示这个XML中的相应内容。在界面中有个按钮用来更新这个XML文件中的内容,更新好XML之后程序会重新读取该XML文件。此时就悲剧了,程序读取的那个XML文件,竟然是没被修改前的那个,而看SD卡中XML文件却成功更新了。
分析:
一时搞不明白到底怎么会这样,后面仔细想了想,可能是android的一种缓存机制吧。猜测android是把第一次读SD卡中的XML文件写入到RAM中了,下一次在SD卡中读相同路径文件名的文件,系统直接是把RAM中那个文件读出来,这样来减少系统开支。
尝试了几种解决办法:
1:在程序更新XML成功后马上清理一下内存(试了一些内存清理应用如360内存清理,任务杀手,可以解决该问题),像试图模仿这些应用的清理内存功能,未模仿成
2:在程序更新XML成功后程序控制卸载SD卡,随后马上在装载SD卡,测试通过。就是这个方法是在是太流氓
3:在程序更新XML文件内容时,顺便把XML文件名都顺带更新,文件名以文件的MD5码来定,保存该文件名用作以后读取
最终选择了第3种处理方法,运行至今没有在出现异常~
分享到:
相关推荐
Android上SD卡图片的标准缓存方法
本数据库文件是清理Android手机SD卡缓存用的,有关这个数据库文件的详细用法请参考博文http://blog.csdn.net/l1028386804/article/details/47375595
android 中运用log4j记录日志到缓存或SD卡,方便错误查询
android 内部存储 sd卡app私有文件 等
这个示例代码实现了清除Android SD卡缓存的功能,如想了解其实现的细节请参考博文:http://blog.csdn.net/l1028386804/article/details/47375595
来获取内置SD卡的路径,但是每款定制过的android 系统的外置SD卡的路径都不一样,那我们怎么才能去获取这个路径呢,我们可以想其它的办法,我这里提供了一个类可以获取外置SD卡或内置SD卡的 label(名称),path(路径)...
Android开发之系统信息【1】——获取Android手机中SD卡存储信息Android开发之系统信息【1】——获取Android手机中SD卡存储信息
android读取sd卡中MP3文件
android 读取和存储sd卡一个例子,欢迎下载!
这个可以获取到Android 6.0版本之后的sd卡的路径和存储大小,可以判断是否存在外设存储。
安卓获取SD卡信息的DEMO,代码可编译运行。兼容多种手机类型
android 手机获取SD卡信息代码
Android手机SD卡文件浏览器:遍历出手机Sd卡中的文件。
cocos2dx下c++调用Java参考
android 从sd卡读取文件 可直接部署使用
Android23SD卡挂载流程浅析.docx
android demo,sd卡文件存储和data下文件存储。
遍历sd卡视频的集合,包括视频缩略图,标题和视频文件大小,如果有做视频播放器,肯定需要先得到视频的集合,本例就是视频的集合的优化。 解决:1遍历所有文件时间过长; 2滑动集合界面卡顿
一款用android读取sd卡中的图片的小程序
android浏览sd卡文件夹,只能浏览sd卡目录的,要想浏览文件系统,代码改动一句话即可