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)
但是当我在文档中调用initLoader()时,UI-Thread将被onCreateLoader中的代码阻止.
正如Luksprog所说,在onCreateLoader()被调用的同一个线程上initLoader()调用,通常这是主要的应用程序线程.的工作onCreateLoader()创造了Loader,因为你可以通过名字已经猜到了.
这不是装载机的全部意义吗?
一点Loader是加载数据.一点AsyncTaskLoader是异步加载数据.我们欢迎您创建一些Loader不继承的其他东西AsyncTaskLoader,在这种情况下,异步加载是您的工作.
我该怎么做才能阻止UI-Thread在这里被阻止?
编写一个正确的实现onCreateLoader(),创建一个Loader实例并返回它,而不是循环100000000次然后返回null.
这在Loader框架的文档中有所涉及.
| 归档时间: |
|
| 查看次数: |
2036 次 |
| 最近记录: |