Android AsyncTask在ICS上没有被召唤几分钟

时间:2012-06-12 16:19:39

标签: android android-asynctask threadpool android-4.0-ice-cream-sandwich

我有一个使用大量AsyncTasks的应用程序,我遇到的问题是,在调用execute之后,一个特别重要的任务在几分钟内没有启动。

如果我将以下内容用于我的ICS设备,则可以正常使用;

if(Build.VERSION.SDK_INT >= 11)
{
  myTask.executeOnExecutor( AsyncTask.THREAD_POOL_EXECUTOR, stuff );
}

而不是在ICS之前;

myTask.execute(stuff);

我知道ICS已将线程执行更改为序列化但我无法弄清楚是什么阻碍了线程队列。

在eclipse中调试中列出了大约20个线程,但是我已经读过,或许这是不正确的,因为调试器往往会继续显示那些不存在的线程。

我如何确定哪些线程正在阻止序列化队列,因此我不必从ICS上的默认值切换,甚至可能提高ICS设备的性能,因为它们没有看到由于线程池执行程序是默认行为。

1 个答案:

答案 0 :(得分:3)

  

如何确定哪些线程正在阻止序列化队列

添加Log语句以跟踪相关doInBackground()方法的进入和退出。

  

甚至可能提高预先ICS设备的性能,因为线程池执行器是默认行为而无法看到问题。

您无需使用AsyncTask。只需分叉您自己的线程并使用runOnUiThread()之类的东西作为在主应用程序线程上执行逻辑的方法。 AsyncTask是一种便利,而非要求。并且,对于异常值高优先级的任务,您可以更有意义地将其远离任何线程池争用。

或者,克隆并分叉AsyncTask以使用PriorityQueue,这样您就可以明确指出您的高优先级任务。