我们在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暗示情况将会如此。
AsyncTask
想知道是否有解决方法可以在API级别11下实现相同的行为。
默认行为是所需的行为。如果您查看的源代码AsyncTask,您将看到,从Gingerbread开始,它使用的线程池至少包含5个线程,最多包含128个线程。
现在,记住,在浩瀚目前使用的大多数Android设备都是单核。因此,除非您的“紧张任务”没有做很多事情而是阻塞了网络I / O,否则您不希望并行执行这些任务,因为线程之间的上下文切换只会使您进一步放慢速度。