Android 可以无限期运行我的服务吗?

Android 可以无限期运行我的服务吗?,android,service,background,Android,Service,Background,我可以无限期地运行后台服务吗?如果我无限期地运行我的服务,android会杀死它吗?Facebook android应用程序如何在后台长时间运行??请帮助我了解它。您可以使用以下功能: 1) 重新启动后自动重新启动服务() 2) 粘性服务模式() 这些功能都有助于让您的服务尽可能始终处于启动状态。如果内存不足,Android将终止您的服务,但您可以做一些事情来恢复它 您可以尝试的第一件事是使用前台服务,前台服务是一种高优先级的服务,除非完全必要,否则不会终止(请注意,这些服务会增加电池消耗)。您

我可以无限期地运行后台服务吗?如果我无限期地运行我的服务,android会杀死它吗?Facebook android应用程序如何在后台长时间运行??请帮助我了解它。

您可以使用以下功能:

1) 重新启动后自动重新启动服务()

2) 粘性服务模式()


这些功能都有助于让您的服务尽可能始终处于启动状态。

如果内存不足,Android将终止您的服务,但您可以做一些事情来恢复它

您可以尝试的第一件事是使用前台服务,前台服务是一种高优先级的服务,除非完全必要,否则不会终止(请注意,这些服务会增加电池消耗)。您可以找到一个使用与旧设备兼容的示例,否则您只需要在服务内部调用startForeground

您可以做的另一件事是在服务被操作系统杀死时,使用服务中的一些标志重新启动它。您可以使用2个不同的标志(取决于您想要重现的行为)

  • START\u STICKY将以空意图重新启动服务,因此每次您都需要恢复运行服务所需的数据

  • START_REDELIVER_INTENT在这种情况下,您的服务将使用最后一个意图信息重新启动(可能是当您需要不同的行为时,您使用不同的信息运行了几次服务)

这些标志可按如下方式使用:

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
//Do your service work
return START_STICKY; //or return START_REDELIVER_INTENT;
}
根据您的需要,使用一种或另一种


希望它有帮助:)

没有办法绝对保护服务不被终止


如果您从
onStartCommand()
返回
START\u STICKY
,那么即使服务被终止,android也会尽力再次启动它,当资源可用时。

感谢Dimmerg,这在一定程度上帮助了我。但我的应用程序由于内存不足而被android扼杀。我如何克服这个问题。您的服务占用大量内存吗?在我的服务中,我在wifi网络中存储来自ip摄像头的帧。这也降低了我设备的速度。这对移动设备来说是一项繁重的任务。尝试以下方法:1)在服务中启动单独的线程以进行长时间和“繁重”操作2)将服务标记为前台:,android.app.Notification)感谢Zozelfefo,它帮了我很多忙。我有个问题要问你,如果我在应用程序中运行多个线程和多个服务,我的设备性能会下降吗?关于这个主题的帮助取决于线程/服务在做什么以及设备的速度,但很可能会有明显的速度下降。我已经安装了facebook应用程序。在我的设备中,它运行良好,甚至不会被android杀死,也不会降低我的设备性能。我如何在我的应用程序中实现这种优化。帮助我首先,所有android设备在同一时间运行的线程数量有限,但我会说是的,由于每个线程中的负载量减少,您的性能可能会下降。对于服务,我们可以这样说,因为服务在UI线程中运行,许多服务可能会降低应用程序的平滑度