在前面的Linux文件系统Inotify机制中介绍了Linux对文件变更监控过程。Android系统在此基础上封装了一个FileObserver类来方便使用Inotify机制。FileObserver是一个抽象类,需要定义子类实现该类的onEvent抽象方法,当被监控的文件或者目录发生变更事件时,将回调FileObserver的onEvent()函数来处理文件或目录的变更事件。
事件监控过程
在FileObserver类中定义了一个静态内部类ObserverThread,该线程类才是真正实现文件或目录监控过程。各种类型的FileObserver都拥有一个ObserverThread实例:
frameworks\base\core\Java\android\os\FileObserver.java
publicabstractclassFileObserver {
//可监控的事件类型
publicstaticfinalintALL_EVENTS = ACCESS | MODIFY | ATTRIB | CLOSE_WRITE
| CLOSE_NOWRITE | OPEN | MOVED_FROM | MOVED_TO | DELETE | CREATE | DELETE_SELF | MOVE_SELF;
//静态创建并启动一个文件监控线程
privatestaticObserverThread s_observerThread;
static{
s_observerThread = newObserverThread();
s_observerThread.start();
}
// instance
privateString m_path;
privateInteger m_descriptor;
privateintm_mask;
}
FileObserver类通过静态方式构造了一个ObserverThread对象:
publicObserverThread() {
super("FileObserver");
m_fd = init();//初始化一个inotify实例,Observer线程就是对该inotify实例进行监控
}
frameworks\base\core\jni\android_util_FileObserver.cpp
staticjint android_os_fileobserver_init(JNIEnv* env, jobject object)
{