Android 文本文件的缓存处理
前景
日常App开发过程中,发现日志有丢失情况,对后期线上问题追溯造成困扰目前项目上使用ali-log-sdk,作为日志上报到云的方案 链接
根据模拟调试发现,当日志量过大会导致其维护的内存满了,后续再次加入的log会被drop掉
解决方案
1. 将log交给sdk进行上报的时候,当上报失败的时候,就将数据保存到文本文件里面2. 文本文件中,log对象通过JSON转化为字符串,每一条数据就是一条记录
3. 当发现有上传成功的时候,检查文本文件中是否存在需要上报的日志
4. 如果缓存的文本文件中存在内容,则读取,上报,
5. 上报成功之后,在文本文件中对目标数据进行标记
6. 检查没有需要上传的数据,则清空所有内容
重要的部分
文本文件中的数据读取可以做到逐行读取容易,但是想要删除某一行会很困难。
一般的方案是创建一个新的文件,将原文件中的数据逐步写入到新的文件,写入过程中对内容进行修改/删除,完成之后再修改文件名替换原来的文件但此方法耗时耗力,不是优选
选用Java-RandomAccessFile作为操作文本文件的工具类,
1. 读取文本内容的时候,记录当前行内容头部的游标pos2. 当log被上传成功之后,则将游标处的内容修改为###
3. 后续逐行读取内容的时候,检查读取的字符串头部是否以###开头,如果是则忽略、跳过,读下一条