您的位置:首页 > 运维架构

FileObserver真能监控文件变化?

2015-11-11 22:12 281 查看
答案:不一定管用
下面是问题:

1,WeakReference导致FileObserver被释放掉。

public void onEvent(int wfd, int mask, String path) {
// look up our observer, fixing up the map if necessary...
FileObserver observer = null;

synchronized (m_observers) {
WeakReference weak = m_observers.get(wfd);
if (weak != null) {  // can happen with lots of events from a dead wfd
observer = (FileObserver) weak.get();
if (observer == null) {
m_observers.remove(wfd);
}
}
}

android虚拟机演变gc对内存的处理更加激进。WeakReference甚至是SoftReference都很容易让FileObserver被回收。

2,线程不退出导致进程kill也无法退出.
FileObserver的jni层打开inotify获取到fd后,没有任何FileObserver也不会主动退出监听,这是因为jni层设计根本就没有考虑close fd;

最后安利我修改后的模块Fix_FileObserver
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: