2017-06-27 10 views
1

アンドロイドでは、UIをブロックしないように別のスレッドですべてのハードワークを行うのがベストプラクティスです。私はローダまたはAsyncTaskLoaderの内側にこれを行う必要がありますAndroidファイル操作を非同期で実行する

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

:今のようなアプリ内部ディレクトリのすべてのファイルを一覧表示するには、私の唯一の目標ですか?私の心の中で別の質問が出ます。私。私Loaderは、この観察者がメインスレッドで構築するなど、これを行うされているディレクトリの変更にFileObserver経由で聞く場合:

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

ディレクトリは、あまりにも非同期ロードする必要があります。

答えて

1

ディレクトリファイルの一覧表示は、通常、非常に高速な操作であり、バックグラウンドスレッドは必要ありません。

変更をファイルに聴きたい場合は、ここであなたの質問の後半部分に答えがFileObserverのマルチスレッドについて、次のとおりです。

それはあなたがFileObserverを作成したスレッド上では重要ではありません。すべての作業は特別なFileObserverスレッドで行われます。この特殊スレッドではonEventが呼び出されます。次に、必要なスレッドを手動で処理する必要があります。 onEventドキュメントは非常に明確です。

サブクラスで実装する必要があるイベントハンドラです。この メソッドは、特殊なFileObserverスレッドで呼び出されます。 はスレッドとは別に実行されるため、適切な 同期を使用するよう注意してください! Handler.post(java.lang.Runnable)を に移動して、同時実行を避けるためにメインスレッドにシフトイベント処理を行うことを検討してください。 問題。

関連する問題