当前位置: 首页 > 面试题库 >

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

闻人升
2023-03-14
问题内容

我们在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中的方法具有多个参数的原因)。Google应该使该API更可重用,以解决不同类型的情况。

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

在此先感谢


问题答案:

我的繁重任务是松散耦合的,执行顺序无关紧要,通过这样做,分配了一个线程来运行一系列繁重任务。

AsyncTask目前使用具有多个线程的线程池。将来,它可能仅限于一个线程-Google暗示情况将会如此。

想知道是否有解决方法可以在API级别11下实现相同的行为。

默认行为是所需的行为。如果您查看的源代码AsyncTask,您将看到,从Gingerbread开始,它使用的线程池至少包含5个线程,最多包含128个线程。

现在,记住,在浩瀚目前使用的大多数Android设备都是单核。因此,除非您的“紧张任务”没有做很多事情而是阻塞了网络I / O,否则您不希望并行执行这些任务,因为线程之间的上下文切换只会使您进一步放慢速度。



 类似资料:
  • 问题内容: 我是android的新手,并且正在开发android应用程序。但是我的包装行在MainActivity.java类中给出了此错误。谁能告诉我这的原因吗?这是我的课程,打包行给出了此错误。 问题答案: 首先,介绍一些细节。有不同 级别 的Android API,每个级别可能会引入新功能,如此处所示。 创建Android应用程序时,您指定运行应用程序的最低级别。这是在做与节:看到这里了解详

  • 在我的应用程序中,一些方法需要最低api级别11。当我在android 2.3.3(api级别10)上运行它时,它崩溃了。 我参考了这些链接 如何修复"调用需要API级别11"与Android活动? setAdapter“调用需要API级别11(当前最小值为8):android.widget.AbsListView#setAdapter”? android-Call需要API级别9(当前最小值为8

  • 问题内容: 和声明有什么区别。 问题答案: 与所有通用类型和原始类型相同: 在这种特殊情况下,和之间没有太大的实际区别,因为它们都表示未知的类。根据现有的声明,编译器可以要求使用通用类型而不是原始类型。 但是: 从Java 1.5开始,您应该尽可能使用通用形式。明确指出您的意思是“未知的班级”,明确指出您的意思是该班级。原始可能意味着 两者 。 最后,它对编译器没有太大的影响,但是在使代码的意图更

  • 我刚刚开始做Android开发,或多或少遵循http://developer.android.com/training/basics/firstapp/starting-activity.html教程,有一件事一直困扰着我:我有两个类,都是使用“Android活动”创建向导创建的: 和 Eclipse不断给我以下错误: 调用需要API级别11(当前最小值为8):android。应用程序。活动#ge

  • 在SDK更新(23)之后,我得到了这个lint错误,我没有对我的代码做任何更改,它在api级别为9的设备上运行良好。另外,我在代码中根本不调用android.app.活动#onCreateView。如果我单击自动修复,它会将@SuppressLint(NewApi)放入类,这样错误就会消失,我想确定这是否是要走的路。

  • 我在Google Play控制台上发布了一些一年多以前的旧APK,它们的目标API级别为9-13。同一应用程序的较新版本的目标API级别更高。 我想删除对旧应用程序版本的支持,我们的REST API将不再支持这些版本。我们几乎没有人使用这些旧版本的应用程序。 但是我找不到从商店中取消发布这个旧APK的方法。是否没有办法删除旧的APK并禁用旧API级别的下载?