2014-01-19 100 views
1

这是我第一次使用装载机。我正在使用加载器来检索电话的联系人列表。装载机不执行任务异步

这里是我的代码:

@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); 

我得到的联系人列表,但装载机在另一个执行主线程的查询,而不是线程,阻止用户界面。

请帮忙吗?

+0

结帐此问题已报告:https://code.google.com/p/android/issues/detail?id=68013 – dhams

回答

0

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

如果您在onLoadFinished中使用游标进行大量工作,那是您自己的阻止UI的代码,而不是加载器管理器。