android服务如何在系统停止时响应

时间:2012-11-05 17:39:40

标签: android service

我有一个问题与系统停止时Android服务的行为有关。根据我的理解,如果系统(OS)由于所需资源而停止服务,则系统有责任再次启动它。在这种情况下,系统在启动服务时不会调用onDestroy(),而在启动服务时不会调用onCreate(),而只是调用onStartCommand()。

如果我在onStartCommand()中创建一个线程,当系统停止服务时如何清理线程。如果我不停止线程,onStartCommand()将创建一个新线程。 我认为,它可能归结为onStartCommand()参数(intent,flags和startId)。系统在停止服务后启动服务可能会有所不同,因为它需要资源。任何人都可以告诉我,当startService()命令启动服务或者系统本身(停止它之后)参数会有什么不同

我可以在onCreate()中创建线程但是我不确定当系统停止服务时线程是否仍然存在。什么是处理这种情况的最佳方式。

由于

1 个答案:

答案 0 :(得分:2)

  

根据我的理解,如果系统(OS)因所需资源而停止服务,系统有责任再次启动它。

这取决于你从onStartCommand()返回的内容。例如,START_NOT_STICKY表示操作系统不必再次启动您的服务。

  

在这种情况下,系统在启动服务时不会调用onDestroy(),而在启动服务时不会调用onCreate(),而只是调用onStartCommand()。

是否调用onDestroy()将取决于服务如何停止(例如,直接或通过进程终止)。但是,如果操作系统重新启动服务,它仍应在新实例上调用onCreate()

  

如果我在onStartCommand()中创建一个线程,当系统停止服务时如何清理线程。

确保在onDestroy()中,会发生导致线程消失的事情。将调用onDestroy()(并且您的服务可以进行清理),或者您的进程正在终止(并且您的线程会随之消失)。

  

有人能告诉我,当startService()命令或系统本身启动服务时(停止之后)参数会有什么不同

传递给START_FLAG_REDELIVERY的标记中会有onStartCommand(),但只有从START_REDELIVER_INTENT返回onStartCommand()时才会设置AFAIK。