实现一个不应该被android停止的服务



我正在开发一个作为后台服务运行的应用程序。我需要实现以下目标:1.使用广播接收器启动手机后启动服务2.服务不应该被android停止,它应该持续运行。

我已经迈出了第一步。在第二步中,我尝试使用startForeground()方法。此方法向用户提供前台服务正在运行的通知。但是,我不希望用户收到有关该服务的通知,并且不应该停止该服务。我怎样才能做到这一点?有没有办法不用startForeground()方法?

如果提供一个示例代码来实现这一点,将是一个很大的帮助。

谢谢!

设置<intent-filter android:priority="integer" >如果我们将优先级设置为高,那么服务将持续运行并捕获事件

只要服务已经启动或有客户端绑定,Android系统就会尝试保持托管服务的进程。当内存不足并需要杀死现有进程时,托管服务的过程的优先级将是以下可能性中较高的:

如果服务当前正在执行onCreate()、onStartCommand()或onDestroy()方法中的代码,那么托管进程将是前台进程,以确保该代码可以在不被杀死的情况下执行。如果服务已经启动,则其托管进程被认为不如用户当前在屏幕上可见的任何进程重要,但比任何不可见的进程更重要。由于用户通常只能看到少数进程,这意味着除非在内存极低的情况下,否则不应终止服务。如果有客户端绑定到服务,那么服务的托管过程的重要性永远不会低于最重要的客户端。也就是说,如果它的一个客户端对用户可见,那么服务本身就被认为是可见的。启动的服务可以使用startForeground(int,Notification)API将服务置于前台状态,系统认为它是用户主动意识到的,因此在内存不足时不会被杀死。(理论上,在当前前台应用程序的极端内存压力下,服务仍然有可能被终止,但在实践中,这不应该是一个问题。)请注意,这意味着在大多数情况下,如果您的服务处于繁重的内存压力下,它可能会被系统终止。如果发生这种情况,系统稍后将尝试重新启动服务。这样做的一个重要后果是,如果您实现onStartCommand()来计划异步或在另一个线程中完成的工作,那么您可能希望使用START_FLAG_DELIVY让系统为您重新传递Intent,这样,如果您的服务在处理时被终止,它就不会丢失。

您无法有效地实现这一点,因为您的服务将始终易受android进程/服务扼杀策略的攻击。

除非您使用的是平台级环境,否则您无法从应用层实现这一点。除非你的服务被终止,否则你有一个程序,当它被终止时,它将重新启动。这就是你所能做的。然而,对于一个完整的解决方案,并且永远不要停止它,你不能这样做,因为这种恶意行为是因为用户应用程序无权永远在手机上运行,并且与其他应用程序相比受到特殊对待,尤其是那些WAY更重要的应用程序,如android系统应用程序及其服务。

如果您不是在平台级别工作,甚至不要尝试来实现这一点,因为您无法成功并使其完全无懈可击

你能做的最好的事情就是尽可能长时间地保持它的活力,但是,如果内存不足,并且你空闲的时间太长,那么预计会被杀死。

相关内容

  • 没有找到相关文章

最新更新