Android AsyncTask not being called for minutes on ICS

ε祈祈猫儿з 提交于 2019-12-10 17:23:48

问题


I have an application that uses a lot of AsyncTasks, the problem I have is that a particularly important task is not being started for upto a couple of minutes after I call execute.

If I use the following for my ICS devices it works;

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

as opposed to this on pre-ICS;

myTask.execute(stuff);

I am aware that ICS has changed thread execution to be serialised but I can't figure out what is holding up the thread queue.

There are about 20 threads listed in debug in eclipse, but I have read around that perhaps this is not correct as the debugger tends to keep displaying ones that aren't really there.

How do I figure out which threads are holding up the serialised queue so i don't have to switch from the default on ICS, and perhaps even improve performance of pre-ICS devices that arne't seeing the problems due to the thread pool executor being default behaviour.


回答1:


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

Add Log statements to track entry and exit from the relevant doInBackground() methods.

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

You don't need to use AsyncTask. Just fork your own thread and use stuff like runOnUiThread() as a means of executing logic back on the main application thread. AsyncTask is a convenience, not a requirement. And, for an outlier high-priority task, it may make more sense for you to simply keep that away from any thread pool contention.

Or, clone and fork AsyncTask to use a PriorityQueue, so you can explicitly indicate your high-priority tasks.



来源:https://stackoverflow.com/questions/11000680/android-asynctask-not-being-called-for-minutes-on-ics

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!