gpt4 book ai didi

java - API 级别 11 之前的 AsyncTask.executeOnExecutor()

转载 作者:IT老高 更新时间:2023-10-28 20:56:29 27 4
gpt4 key购买 nike

我们在 Android 中执行 AsyncTask 的正常方式是,来自 Android API:

 private class DoIntenseTask extends AsyncTask<Object, Object, Void> {
protected Void doInBackground(Object... params) {
for (Object param : params) {
Object rtnObj = doIntenseJob(param);
publishProgress(rtnObj);
}
return null;
}

protected void onProgressUpdate(Object... progress) {
for (Object rtnObj : progress) {
updateActivityUI(rtnObj);
}
}

}

我的密集任务是松耦合的,执行顺序无关紧要,通过这种方式,分配一个线程来运行一系列密集任务。我个人认为这是一种半途而废的解决方案。是的,紧张的工作不再在 UI 线程中运行,但仍然需要一个接一个地执行(在很多情况下,我们面临着一份密集的工作列表,我认为这也是为什么 AsyncTask 中的方法是多参数化的)。谷歌应该使 API 更可重用以解决不同类型的场景。

我真正喜欢的是并行运行多个由线程池管理的 doIntenseJob()(例如 poolSize = 5)。看起来谷歌确实通过 AsyncTask.executeOnExecutor() 提供了一个解决方案,但不幸的是,自 API 级别 11 起才可用。我正在开发移动应用程序,想知道是否有一种解决方法可以在 API 级别 11 下实现相同的行为。

提前致谢
是的

最佳答案

如果您的构建目标设置为 API 级别 11 或更高,并且您想专门使用并行任务,您将需要开始在代码中明确说明这一点,类似于:

if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB) {
myTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void[]) null);
}
else {
myTask.execute((Void) null);
}

http://commonsware.com/blog/2012/04/20/asynctask-threading-regression-confirmed.html

关于java - API 级别 11 之前的 AsyncTask.executeOnExecutor(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7211684/

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