2014-01-19 132 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的代碼,而不是加載器管理器。