2017-06-27 40 views
1

在android中最好的做法是在一個單獨的線程中完成所有的努力工作,永不阻止用戶界面。現在是我列出像一個應用程序內部目錄下的所有文件的唯一目標:Android做文件操作異步

final File directory = new File(context.getFilesDir(), "images"); 
if(!directory.exists()) { 
    directory.mkdirs(); 
} 
return directory.listFiles(); 

應該怎麼做這個加載器或AsyncTaskLoader裏面?在我的腦海裏又爆出另一個問題。即如果我的裝載機通過FileObserver聽目錄的變化則是這個觀測建立在主線程和做到這一點,如:然後

new FileObserver(new File(context.getFilesDir(), "images").getPath()) ... 

的目錄應該異步加載過。

回答

1

列出目錄文件通常是一個非常快速的操作,不需要後臺線程。

如果你要聽文件的變化,這裏是你的問題的第二部分的答案,關於FileObserver多線程:

不要緊哪個線程創建FileObserver。所有的工作都發生在一個特殊的FileObserver線程上。在此特殊線程中調用onEvent。您應該手動處理您需要的線程。 onEvent文檔說得很清楚:

事件處理程序必須由子類實現。這個 方法在特殊的FileObserver線程上被調用。它獨立於任何線程運行 ,因此請注意使用適當的 同步!考慮使用Handler.post(java.lang.Runnable)以 移位事件處理工作到主線程,以避免併發 問題。