8

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

4

3 回答 3

6

如果已经init()从 UI 线程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
        }

    }

:)

于 2013-08-20T03:15:44.023 回答
2

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

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

于 2013-08-20T03:16:10.593 回答
0

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

@Override
public void onStop() {
    super.onStop();
    getSupportLoaderManager().destroyLoader(LOADER_ID);
}
于 2013-11-09T22:50:59.603 回答