gpt4 book ai didi

android - onCreateLoader 阻塞了 UI 线程

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:38:07 26 4
gpt4 key购买 nike

我想试试 Loaders。但是当我像在文档中那样调用 initLoader() 时,UI-Thread 被来自 onCreateLoader 的代码阻塞。这不是 Loaders 的全部意义吗?为什么会这样,我应该怎么做才能防止 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
}

最佳答案

But when i call initLoader() like it's done in the documentation, the UI-Thread is getting blocked with the code from onCreateLoader.

正如 Luksprog 所指出的,onCreateLoader() 在调用 initLoader() 的同一线程上被调用,并且通常是主应用程序线程。 onCreateLoader() 的工作是创建 Loader,您可能已经从名称中猜到了。

Isn't that the whole point of Loaders?

Loader 的作用是加载数据。 AsyncTaskLoader 的作用是异步加载数据。欢迎您创建一些不从 AsyncTaskLoader 继承的其他 Loader,在这种情况下执行异步加载是的工作。

what should i do to prevent the UI-Thread from beeing blocked here?

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

这包含在 the documentation on the Loader framework 中.

关于android - onCreateLoader 阻塞了 UI 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23457701/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com