我正在使用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