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

Android AsyncTask在ICS上没有被召唤几分钟,第1张

概述我有一个使用大量AsyncTasks的应用程序,我遇到的问题是,在调用execute之后,一个特别重要的任务在几分钟内没有启动. 如果我将以下内容用于我的ICS设备,它可以工作; if(Build.VERSION.SDK_INT >= 11){ myTask.executeOnExecutor( AsyncTask.THREAD_POOL_EXECUTOR, stuff );} 而在ICS 我有一个使用大量AsyncTasks的应用程序,我遇到的问题是,在调用execute之后,一个特别重要的任务在几分钟内没有启动.

如果我将以下内容用于我的ICS设备,它可以工作;

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

而在ICS之前则与此相反;

myTask.execute(stuff);

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

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

我如何确定哪些线程正在阻止序列化队列,因此我不必从ICS上的默认值切换,甚至可能提高因ICSP设备无法看到由于线程池执行器而导致的问题的ICS前设备的性能是默认行为.

解决方法

How do I figure out which threads are holding up the serialised queue

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

and perhaps even improve performance of pre-ICS devices that arne’t seeing the problems due to the thread pool executor being default behavIoUr.

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

或者,克隆和分叉AsyncTask以使用PriorityQueue,因此您可以明确指出您的高优先级任务.

总结

以上是内存溢出为你收集整理的Android AsyncTask在ICS上没有被召唤几分钟全部内容,希望文章能够帮你解决Android AsyncTask在ICS上没有被召唤几分钟所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1127119.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存