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