Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android onLoadFinished()是异步的(后台线程)吗?_Android_Android Loadermanager - Fatal编程技术网

Android onLoadFinished()是异步的(后台线程)吗?

Android onLoadFinished()是异步的(后台线程)吗?,android,android-loadermanager,Android,Android Loadermanager,我目前正在考虑使用加载器管理器在抽屉布局中填充我的expandablelistview。如果回调函数onLoadFinished()在UI线程或后台线程上运行,我在文档中找不到任何地方。它是否在后台线程上?如果您从UI线程调用了init(),则肯定会在UI线程上调用onLoadFinished()。例如,当您从后台调用AsyncTaskLoader时,将收到结果通知的线程将是您初始化加载程序的线程 …但您仍然可以执行以下操作: @Override public void onLoadFi

我目前正在考虑使用加载器管理器在抽屉布局中填充我的expandablelistview。如果回调函数onLoadFinished()在UI线程或后台线程上运行,我在文档中找不到任何地方。它是否在后台线程上?

如果您从UI线程调用了
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线程中被调用?