Android onLoadFinished()是异步的(后台线程)吗?
我目前正在考虑使用加载器管理器在抽屉布局中填充我的expandablelistview。如果回调函数onLoadFinished()在UI线程或后台线程上运行,我在文档中找不到任何地方。它是否在后台线程上?如果您从UI线程调用了Android onLoadFinished()是异步的(后台线程)吗?,android,android-loadermanager,Android,Android Loadermanager,我目前正在考虑使用加载器管理器在抽屉布局中填充我的expandablelistview。如果回调函数onLoadFinished()在UI线程或后台线程上运行,我在文档中找不到任何地方。它是否在后台线程上?如果您从UI线程调用了init(),则肯定会在UI线程上调用onLoadFinished()。例如,当您从后台调用AsyncTaskLoader时,将收到结果通知的线程将是您初始化加载程序的线程 …但您仍然可以执行以下操作: @Override public void onLoadFi
init()
,则肯定会在UI线程上调用onLoadFinished()
。例如,当您从后台调用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
}
}
@覆盖
public void onLoadFinished(加载程序arg0,字符串arg1){
Runnable populate=新的Runnable(){
@凌驾
公开募捐{
//你的代码
}
};
if(Looper.getMainLooper().getThread()==Thread.currentThread()){
//在Ui线程上
populate.run();
}否则{
this.runOnUiThread(populate);//或使用处理程序运行runnable
}
}
:)第566页
“在后台加载数据后,将在主线程上调用onFinishedLoad()方法。”下面的添加代码将解决在onLoadFinished()中调用getView()返回NullPointerException的问题
@Override
public void onStop() {
super.onStop();
getSupportLoaderManager().destroyLoader(LOADER_ID);
}
当我添加检查以查看回调是否在主线程中时,我似乎得到了这样的结果。。“Init不在主线程中”、“在主线程中完成” 请注意,我从一个单独的线程调用了加载程序。这是否意味着无论您如何调用init loader,您的onLoadFinished都会在UI线程中被调用?