我正在使用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线程管理的更多信息:
Android AsyncTask threads limits?
Is there a limit of AsyncTasks to be executed at the same time?