我有一个问题与系统停止时Android服务的行为有关。根据我的理解,如果系统(OS)由于所需资源而停止服务,则系统有责任再次启动它。在这种情况下,系统在启动服务时不会调用onDestroy(),而在启动服务时不会调用onCreate(),而只是调用onStartCommand()。
如果我在onStartCommand()中创建一个线程,当系统停止服务时如何清理线程。如果我不停止线程,onStartCommand()将创建一个新线程。 我认为,它可能归结为onStartCommand()参数(intent,flags和startId)。系统在停止服务后启动服务可能会有所不同,因为它需要资源。任何人都可以告诉我,当startService()命令启动服务或者系统本身(停止它之后)参数会有什么不同
我可以在onCreate()中创建线程但是我不确定当系统停止服务时线程是否仍然存在。什么是处理这种情况的最佳方式。
由于
答案 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。