是onLoadFinished()异步(后台线程)?

时间:2013-08-20 03:02:52

标签: android android-loadermanager

我目前正在寻找使用装载程序管理器在drawerlayout中填充我的expandablelistview。如果回调函数onLoadFinished()在UI线程或后台线程上运行,我在文档中找不到任何地方。它是在后台线程吗?

3 个答案:

答案 0 :(得分:6)

如果您从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
        }

    }

:)

答案 1 :(得分:2)

http://www.amazon.com/Android-Programming-Ranch-Guide-Guides/dp/0321804333,pg。 566.

“一旦数据在后台加载,将在主线程上调用onFinishedLoad()方法。”

答案 2 :(得分:0)

下面添加代码将解决在onLoadFinished()中调用getView()返回NullPointerException的问题

@Override
public void onStop() {
    super.onStop();
    getSupportLoaderManager().destroyLoader(LOADER_ID);
}