1

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

如果我在 onStartCommand() 中创建一个线程,当系统停止服务时我将如何清理线程。如果我不停止线程, onStartCommand() 将创建一个新线程。我认为,它可能归结为 onStartCommand() 参数(意图、标志和 startId)。当系统在停止服务后启动服务时,它们可能会有所不同,因为它需要资源。谁能告诉我当服务由 startService() 命令或系统本身启动时(停止后)参数有什么不同

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

谢谢

4

1 回答 1

3

据我了解,如果系统(OS)由于需要资源而停止服务,系统有责任重新启动它。

这取决于你从什么返回onStartCommand()START_NOT_STICKY,例如,意味着操作系统不必再次启动您的服务。

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

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

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

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

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

START_FLAG_REDELIVERY传递给的标志中有一个,但AFAIK只有在你从onStartCommand()返回时才会设置。START_REDELIVER_INTENTonStartCommand()

于 2012-11-05T17:49:35.837 回答