Android 文本文件的缓存处理

前景

日常App开发过程中,发现日志有丢失情况,对后期线上问题追溯造成困扰
目前项目上使用ali-log-sdk,作为日志上报到云的方案 链接
根据模拟调试发现,当日志量过大会导致其维护的内存满了,后续再次加入的log会被drop掉

解决方案

1. 将log交给sdk进行上报的时候,当上报失败的时候,就将数据保存到文本文件里面
2. 文本文件中,log对象通过JSON转化为字符串,每一条数据就是一条记录
3. 当发现有上传成功的时候,检查文本文件中是否存在需要上报的日志
4. 如果缓存的文本文件中存在内容,则读取,上报,
5. 上报成功之后,在文本文件中对目标数据进行标记
6. 检查没有需要上传的数据,则清空所有内容

重要的部分

文本文件中的数据读取可以做到逐行读取容易,但是想要删除某一行会很困难。

一般的方案是创建一个新的文件,将原文件中的数据逐步写入到新的文件,写入过程中对内容进行修改/删除,完成之后再修改文件名替换原来的文件
但此方法耗时耗力,不是优选

选用Java-RandomAccessFile作为操作文本文件的工具类,

1. 读取文本内容的时候,记录当前行内容头部的游标pos
2. 当log被上传成功之后,则将游标处的内容修改为###
3. 后续逐行读取内容的时候,检查读取的字符串头部是否以###开头,如果是则忽略、跳过,读下一条

 

posted @ 2023-02-24 16:11  zhou_guobao  阅读(78)  评论(0编辑  收藏  举报