加载程序不执行任务异步



这是我第一次使用加载器。我正在使用加载器来检索手机的联系人列表。

这是我的代码:

@SuppressLint("InlinedApi")
@Override
public Loader<Cursor> onCreateLoader(int loaderId, Bundle args) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        String[] projection = { Contacts._ID, Contacts.LOOKUP_KEY, Contacts.DISPLAY_NAME_PRIMARY, Contacts.PHOTO_THUMBNAIL_URI };
        return new CursorLoader(this, Contacts.CONTENT_URI, projection, null, null, null);
    } else {
        String[] projection = { Contacts._ID, Contacts.LOOKUP_KEY, Contacts.DISPLAY_NAME };
        return new CursorLoader(this, Contacts.CONTENT_URI, projection, null, null, null);
    }
}
@SuppressLint("InlinedApi")
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
    if (cursor.getCount() > 0) {
        //PARSE DATA
    }
    cursor.close();
}

在我调用的onCreate()方法

getSupportLoaderManager().initLoader(0, null, this);

我得到了联系人列表,但加载程序在主线程而不是另一个线程中执行查询,从而阻止了 ui。

请帮忙吗?

我会质疑你关于查询在 UI 线程中运行的断言。查询在后台线程 (onCreateLoader) 中运行,结果的游标在 UI 线程 (onLoadFinish) 上返回给您,目的是您可以使用结果以某种方式更新 UI,例如将光标交换到适配器中。

如果你在onLoadDone中使用光标做了很多工作,那就是你自己的代码阻止了UI,而不是加载程序管理器。

最新更新