在android中是最好的做法,在单独的线程中做所有的努力工作,永远不会阻止ui。现在我唯一的目标是列出应用程序内部目录的所有文件,如:
final File directory = new File( context.getFilesDir(), "images" );
if( !directory.exists() ) {
directory.mkdirs();
}
return directory.listFiles();
我应该在Loader或AsyncTaskLoader中执行此操作吗?在我的脑海中弹出另一个问题。即如果我的Loader通过FileObserver监听目录更改,那么这个观察者是否在主线程中构建并执行以下操作:
new FileObserver( new File( context.getFilesDir(), "images" ).getPath() ) ...
然后该目录也应加载异步。
答案 0 :(得分:1)
列出目录文件通常是一个非常快速的操作,并且不需要后台线程。
如果您想收听文件更改,请回答有关FileObserver多线程的问题的第二部分:
创建FileObserver
的线程并不重要。所有工作都在特殊的FileObserver线程上进行。在此特殊线程中调用onEvent
。然后,您应该手动处理所需的线程。 onEvent
文档非常明确:
事件处理程序,必须由子类实现。这个 在特殊的FileObserver线程上调用方法。它运行 独立于任何线程,所以要小心使用适当的 同步!考虑使用Handler.post(java.lang.Runnable)来 将事件处理工作转移到主线程以避免并发 问题。