我正在使用FileObserver来观察目录中的更改。该流程在90%的时间内正常工作,但偶尔也会失败。Android FileObserver传递未记录的事件32768
这里的logcat的工作示例:
04-23 21:12:03.873: V/ItemObserver(1663): Setting up new item observer for item 2
04-23 21:12:04.374: I/ItemObserver(1663): Received item event for item 2, event: 256, file: batch.get.47
04-23 21:12:07.866: I/ItemObserver(1663): Received item event for item 2, event: 512, file: batch.get.47
04-23 21:12:07.873: I/ItemObserver(1663): Received item event for item 2, event: 512, file: item.xml
04-23 21:12:07.883: I/ItemObserver(1663): Received item event for item 2, event: 256, file: item.xml
04-23 21:12:08.033: I/ItemObserver(1663): Received item event for item 2, event: 8, file: item.xml
这是一个失败的例子:
04-23 22:08:09.403: V/ItemObserver(1751): Setting up new item observer for item 2
04-23 22:08:09.813: I/ItemObserver(1751): Received item event for item 2, event: 256, file: batch.get.52
04-23 22:08:09.954: I/ItemObserver(1751): Received item event for item 2, event: 32768, file: null
一旦我得到了32768的事件有一个空文件,一切都停止。我已经检查了FileObserver的源代码并搜索了inotify 32768,并且无法找到它在任何地方被引用的地方。
成立观察者的代码如下:
itemDirObserver = new FileObserver(getItemsCache().getProcessedItemDir(itemId).getPath(),
FileObserver.CLOSE_WRITE | FileObserver.CREATE | FileObserver.DELETE) {
@Override
public void onEvent(int event, final String file) {
itemDirChanged(event, file);
}
};
itemDirObserver.startWatching();
的logcat的代码是:
public synchronized void itemDirChanged(int event, String file) {
Log.i(LOG, "Received item event for item " + itemId + ", event: " + event + ", file: " + file);
switch (event) {
<snip>
任何想法是32768个空文件表示?
我决定将这个文件作为一个错误提交:http://code.google.com/p/android/issues/detail?id=29546&q=FileObserver&colspec=ID%20Type%20Status %20Owner%20Summary%20Stars – mvsjes2 2012-04-25 22:11:53
检查此问题:http://stackoverflow.com/questions/2452661/file-observer-problem – Ciprian 2012-05-10 13:08:08
谢谢。问题似乎是,即使在调用stopWatching之后,在您的观察者对象被垃圾收集之前,您可以在回调中获取多个32768事件,因此您需要在调用stopWatching之后在观察者类中嵌入事件。国际海事组织,在stopWatching被调用后,你不应该再担心它。FileObserver类当然需要更新以与inotify更加同步。 – mvsjes2 2012-06-01 15:13:56