【发布时间】:2013-09-21 01:14:33
【问题描述】:
我对服务有疑问。
我知道服务在后台运行,但我认为您必须在服务中创建一个线程,否则它会阻塞主线程并且您会收到 ANR 错误。
我以为我明白了!但后来我在 Android 开发者指南中读到了这个:
...如果您的服务在用户与来自同一应用程序的活动交互时执行密集或阻塞操作,则服务将降低活动性能。为避免影响应用程序性能,您应该在服务内启动一个新线程。>
该段落提到“密集或阻塞操作”,但没有提到 ANR 错误,它提到了性能。那么服务是如何工作的呢?
假设一个活动启动一个服务。 Service是否默认在主线程的后台运行?这意味着您仍然可以在服务运行时使用您的活动,但是由于您的活动和服务共享主线程的资源,这会降低活动的性能,并且如果服务正在执行 CPU 密集型工作,它可能会离开没有资源可供活动使用,最终您会收到 ANR 错误。
最佳实践(但不一定,如果服务正在做轻量工作)是在服务中启动一个新线程,现在 Activity 和服务正在使用它们自己的线程资源。然后您可以关闭您的活动,但 Android 会保持服务线程处于活动状态。
是这样吗?谢谢=)
【问题讨论】:
-
服务在唯一的主线程中运行。他们在后台什么都不做。在 Activity 处于活动状态时阻止服务将导致 ANR。
标签: android multithreading service