android 监听文件变化,FileObserver真能监控文件变化?

答案:不一定管用。 下面是问题:

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;