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

Pri*_*ank 4 service multithreading android android-activity

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

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

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

Pri*_*ank 6

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

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

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

希望能帮助别人.


Che*_*mon 5

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

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

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

  • 请注意,`AsyncTask`内置了一个线程池. (4认同)