加载程序不执行任务异步

时间:2014-01-19 14:47:44

标签: android multithreading

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

这是我的代码:

@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。

请帮忙吗?

1 个答案:

答案 0 :(得分:0)

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

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