【发布时间】:2013-08-20 03:02:52
【问题描述】:
我目前正在考虑使用加载器管理器在抽屉布局中填充我的可扩展列表视图。如果回调函数 onLoadFinished() 在 UI 线程或后台线程上运行,我在文档中找不到任何位置。它在后台线程上吗?
【问题讨论】:
标签: android android-loadermanager
我目前正在考虑使用加载器管理器在抽屉布局中填充我的可扩展列表视图。如果回调函数 onLoadFinished() 在 UI 线程或后台线程上运行,我在文档中找不到任何位置。它在后台线程上吗?
【问题讨论】:
标签: android android-loadermanager
如果你已经从 UI 线程调用了init(),那么onLoadFinished() 肯定会在 UI 线程上被调用。例如,当您从后台调用 AsyncTaskLoader 时,将收到有关结果通知的线程将是您初始化加载程序的线程。
...但是您仍然可以执行以下操作:
@Override
public void onLoadFinished(Loader<String> arg0, String arg1) {
Runnable populate = new Runnable(){
@Override
public void run() {
//your code
}
};
if (Looper.getMainLooper().getThread() == Thread.currentThread()) {
//on Ui thread
populate.run();
}else{
this.runOnUiThread(populate); //or use handler to run the runnable
}
}
:)
【讨论】:
请注意,我从一个单独的线程中调用了加载程序。这是否意味着无论您如何调用 init loader,您的 onLoadFinished 都会在 UI 线程中调用?
http://www.amazon.com/Android-Programming-Ranch-Guide-Guides/dp/0321804333,第。 566.
“在后台加载数据后,将在主线程上调用 onFinishedLoad() 方法。”
【讨论】:
下面添加代码将解决onLoadFinished()中调用getView()返回NullPointerException的问题
@Override
public void onStop() {
super.onStop();
getSupportLoaderManager().destroyLoader(LOADER_ID);
}
【讨论】: