android – 我可以在单个流程应用程序中运行多少个AsyncTasks

我正在使用asyncTasks,用图像加载列表元素(只需按照android的有效加载位图的教程)

在DDMS中,我可以看到最多5个AsyncTasks正在运行

此外,我还添加了另一个AsyncTask,它使用MediaCodec类执行一些解码.

现在在DDMS中,我仍然看到5个AsyncTasks,我的图像加载aynctask或解码异步任务执行,而不是两个.

当解码正在运行时,如果我滚动列表,元素的图像不会更新
反之,当我通过调用它的执行方法启动新的解码asynctask时,解码不会启动,但如果我现在滚动列表视图,则更新图像.

那么AsyncTask是否有限制?

即使在listAdapter中,我也会根据getView调用启动AsyncTask.我期待7个运行asyncTasks(如果列表可见元素是7,比方说),但DDMS只显示5个asynctasks正在运行.

现在有人可以解释一下我无法拼写的黑魔法是什么吗?

解决方法:

你可以同时运行多少个AsyncTasks?

在大多数Android版本中,答案是128.

为什么你一般会看到5个AsyncTask线程?

AsyncTask线程管理相当混乱,特别是因为自第一个Android发布以来它已经发生了很大变化.

在较新的Android版本中,默认情况下会创建5个线程,而ThreadPoolExecutor将尝试在这5个线程上运行AsyncTasks.如果您创建了5个以上的AsyncTasks,它可能会将它们排队或创建新线程(但最多只能创建128个).

请注意,在早期版本的Android中,这些限制是不同的.我相信,最初只创建了一个线程.

但是你的所有图像最终都应该加载……

要回答问题的其他部分,除非您正在加载大量图像(其中很多意味着> 128),所有图像都应加载,尽管可能是顺序加载.如果前5个加载而其余不加载,则可能表示您的doInBackground()函数永远不会完成,或者您正在使用的AsyncTask存在其他问题.

资源:

以下是一些有用的资源,可用于了解有关AsyncTask线程管理的更多信息:

AsyncTask threads never die

Android AsyncTask threads limits?

Is there a limit of AsyncTasks to be executed at the same time?

上一篇:如何在java中设置Socket写入时间?


下一篇:ExecutorService-中断线程的操作shutdown和shutdownNow