FileObserver真能监控文件变化?

原创
2015/11/11 22:12
阅读数 1.6K

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

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

展开阅读全文
加载中

作者的其它热门文章

打赏
1
0 收藏
分享
打赏
1 评论
0 收藏
1
分享
返回顶部
顶部