Android中的文件监听 FileObserver监听无效

笔者遇到一个因 GC 而引发的监听无效的问题。今天遇到个需求:需要监听某个文件的状态。

于是在网上找到答案,原来 Android 默认就提供了一个 android.os.FileObserver 的功能,可以监听文件系统中指定文件或文件夹的各种访问事件。

关于 FileObserver 的使用,笔者主要参考了这两篇博客:
https://www.jianshu.com/p/a509ad4311c0
https://blog.csdn.net/Tony_YY/article/details/89688438

但是,当笔者亲自写代码来验证的时候,却发现当受监听的文件的状态改变了以后,FileObserver 的 onEvent() 方法死活不会回调的问题。笔者加过各种打印,也更换过种种文件位置,均发现 FileObserver 无法监听。

遍寻百度无果,万般无奈之下看了 android 官方关于 FileObserver 的文档:
https://developer.android.google.cn/reference/android/os/FileObserver.html
终于在文档中看到一句警告,如下图所示:
在这里插入图片描述
这句警告大致的意思是:建议创建一个生命周期比较长的变量来存储你的 FileObserver 实例,否则有可能发生实例被 GC 回收的情况,一旦 FileObserver 实例被回收了,就无法监听了。

醍醐灌顶!

翻看一下笔者的代码,笔者当时贪方便,直接以下面的形式来启动文件监听:

new HDMIWatcher().startWatching();

这样创建出来的实例,显示有很大的几率被 GC 回收掉。

于是改成用一个全局变量的储存实例引用的方式:

watcher = new HDMIWatcher();
watcher.startWatching();

再次验证,发现问题已经没有了。还是官方文档好啊。

以上内容转载于:
https://www.cnblogs.com/chorm590/p/12370952.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值