2011-10-04 79 views
0

我正在构建一个应用程序,我需要一个永远不会像android系统服务那样停止的服务。我可以让系统使用start_not_sticky重新启动我的服务,但不能保证我的服务永远不会停止。所以我的想法是,如果有任何方式可以广泛接收我的服务将关闭时,我可以重新启动服务。有什么方法可以接收?服务关闭时收到

+0

你的服务被杀害我觉得你可以做的onDestroy一些事情()........... – viv

+1

你为什么不跑你的服务的前景? startForeground()可供您运行关键服务。 – PH7

回答

1

的文档最好的解释是:

  • 使用startForeground(int, Notification) API把服务前台状态,当系统认为它是一些用户正在积极了解的,因此不给候选人内存不足时会造成死亡。 (从目前的前台应用程序在极端内存压力下,该服务在理论上仍然有可能被杀死,但实际上这应该不是问题。)

  • 注意这意味着大部分时间您的服务正在运行如果系统处于高内存压力下,它可能会被系统杀死。如果发生这种情况,系统将稍后尝试重新启动服务。这样做的一个重要结果是,如果您实现onStartCommand()来安排异步或在另一个线程中完成工作,那么您可能希望使用START_FLAG_REDELIVERY让系统为您重新提供一个意图,以便它不会丢失如果在处理它

+0

实际上我在我的一个应用程序中使用了startForeground()方法,但不幸的是它不能很好地工作,仍然有时候我的服务通过系统停止。然后我用警报解决了这个问题,当我需要做一些工作时触发警报。如果您考虑电池消耗,您知道警报是昂贵的。这就是为什么我需要更好的东西。 –