这是我第一次使用装载机。我正在使用加载器来检索手机的联系人列表。
这是我的代码:
@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。
请帮忙吗?
答案 0 :(得分:0)
我会质疑你的断言,即查询在UI线程中运行。查询在后台线程(onCreateLoader)中运行,结果的光标在UI线程(onLoadFinished)上返回给您,意图是您可以使用结果以某种方式更新UI,例如将光标交换到适配器。
如果你在onLoadFinished中使用游标做了很多工作,那就是你自己的代码阻塞了UI,而不是加载器管理器。