onCreateLoader阻止了UI线程

Sas*_*cha 4 multithreading android loader

我想尝试装载机.但是当我在文档中调用initLoader()时,UI-Thread将被onCreateLoader中的代码阻止.这不是装载机的全部意义吗?为什么会这样,我该怎么做才能阻止UI-Thread在这里被阻止?我在Nexus 5上使用Android Studio中的调试.

@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
}
Run Code Online (Sandbox Code Playgroud)

Com*_*are 6

但是当我在文档中调用initLoader()时,UI-Thread将被onCreateLoader中的代码阻止.

正如Luksprog所说,在onCreateLoader()被调用的同一个线程上initLoader()调用,通常这是主要的应用程序线程.的工作onCreateLoader()创造了Loader,因为你可以通过名字已经猜到了.

这不是装载机的全部意义吗?

一点Loader是加载数据.一点AsyncTaskLoader是异步加载数据.我们欢迎您创建一些Loader不继承的其他东西AsyncTaskLoader,在这种情况下,异步加载是您的工作.

我该怎么做才能阻止UI-Thread在这里被阻止?

编写一个正确的实现onCreateLoader(),创建一个Loader实例并返回它,而不是循环100000000次然后返回null.

Loader框架的文档中有所涉及.