Android活动/服务中的多个主题

时间:2010-10-14 15:42:18

标签: android multithreading service android-activity

我有一个Android应用程序,在列表视图中列表中的每个元素,我在一个单独的线程中从web加载图像。因此,如果列表视图中显示8个项目,则活动将尝试触发8个不同的线程,每个列表项一个用于加载图像。向下滚动列表时,如果先前的线程尚未完成执行,则线程数可能会增加。

我很想知道单个Android应用程序可以并行执行多少个并发线程?有限制吗?我不希望这些线程因为它们是独立的而导致ANR过慢的互联网连接?但似乎ANR确实发生了,可能是因为应用程序/设备资源不足,因此在UI中生成新活动需要5秒以上才能产生ANR?

任何有关如何在慢速互联网连接上提高响应能力的线索将不胜感激。

2 个答案:

答案 0 :(得分:6)

后来我发现我的应用程序挂起并且速度不慢,因为它产生的线程太多了。但它是因为我使用的是Service而不是IntentService。我的网络IO发生在Service的主线程上。这意味着阻塞IO将阻塞主线程,手机/应用程序将趋于死亡并弹出ANR。

我后来改变了我的设计,在我的服务中生成的线程中运行网络IO操作,将生命重新放回应用程序中。一切都比预想的更顺畅。

因此,无论何时您的服务导致ANR,请确保如果您不使用IntentService(它们在单独的线程中触发作业),那么您将在新线程中触发阻塞操作。

希望能有所帮助。

答案 1 :(得分:5)

处理此问题的一种方法是使用thread pool。我不知道同时线程的数量是否有限制,但创建和销毁它们是昂贵的。使用线程池,您可以执行有限数量的线程来执行任务。

线程可以在完成任务后重复使用,从而提高性能。

如果你有更多的工作需要同时完成而不是你有线程来执行它,你需要排队工作,直到线程空闲。