OnCreateLoader блокирует поток пользовательского интерфейса

Я хочу попробовать Loaders. Но когда я вызываю initLoader (), как это сделано в документации, UI-Thread блокируется кодом из onCreateLoader. Разве это не все точки погрузчиков? Почему это и что мне делать, чтобы предотвратить блокировку UI-Thread? Я использую отладку в Android Studio на Nexus 5.

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_content_provider_test); getLoaderManager().initLoader(0, null, this); } @Override public Loader onCreateLoader(int loaderID, Bundle args) { //Do nothing 100000000 times for(int i=0; i< 100000000; i++) ; return null; } @Override public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) { //nothing to display } @Override public void onLoaderReset(Loader loader) { //nothing to reset } 

    Но когда я вызываю initLoader (), как это сделано в документации, UI-Thread блокируется кодом из onCreateLoader.

    Как отмечает Luksprog, onCreateLoader() вызывается в том же потоке, что и initLoader() , и обычно это основной поток приложений. Работа onCreateLoader() для создания Loader , как вы, возможно, догадались по имени.

    Разве это не все точки погрузчиков?

    Точкой Loader является загрузка данных. Точка AsyncTaskLoader должна загружать данные асинхронно. Вы можете создать другой Loader , который не наследуется от AsyncTaskLoader , и в этом случае асинхронная загрузка – это ваша работа.

    Что я должен сделать, чтобы предотвратить блокировку UI-Thread?

    Напишите правильную реализацию onCreateLoader() , которая создает экземпляр Loader и возвращает его, а не цикл 100000000 раз, а затем возвращает null .

    Это описано в документации по инфраструктуре Loader .