安卓服务

15
请解释一下 Android 服务(Service)。它与活动(Activity)有何不同?它是否依赖于应用程序状态,例如运行在前台/后台?
2个回答

29

Android开发人员SDK服务参考

一个服务是一个应用程序组件,代表一个应用程序希望执行长时间运行操作而不与用户交互或为其他应用程序提供功能。

非常重要的一点是

就像其他应用对象一样,服务在它们的主机进程的主线程中运行。这意味着,如果您的服务将执行任何CPU密集型操作(例如MP3播放)或阻塞操作(例如网络),它都应该在自己的线程中产生工作。

这与活动形成对比,最好理解为用户直接看到并与之交互的内容(即UI)。

如上所述,服务可以用于长时间运行的操作,即使您没有前台活动,但如果处于“后台”状态,它们也可能或者终将被Android的生命周期杀死。如果需要您的服务作为单个实例继续运行而不被杀死并重新启动,则建议在服务的onCreate方法中放置startForeground(int id, Notification notification)和在服务的onDestroy方法中放置stopForeground(boolean removeNotification)

例如,我有一个应用程序,使用前台服务在android设备靠近用户身体时记录加速度计数据。虽然它不需要激活,但我还有一个Activity广播一个IntentService内部的BroadcastReceiver,告诉Service应该也通过附加加速度计数据的Intent广播到Activity内部的BroadcastReceiver

代码:

SleepActivity是一个与睡眠监测有关的应用程序,SleepAccelerometerService是其伴随的一项服务。祝好运,如果需要更多信息,请告诉我!

1
你的第二个链接“SleepAccelerometerService”已经失效。 - gonzobrains
你需要使用某种WakeLock来保持服务运行,即使手机进入睡眠状态吗? - gonzobrains
请注意,对于每个长时间运行和消耗 CPU 的操作,您可能希望在新线程中运行服务代码,因为服务默认运行并存在于 UI 线程中。您可以使用 IntentService 来满足大部分需求。HandlerThread 和 ThreadPoolExecutor 是更灵活但更复杂的替代方案。 - type-a1pha

4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接