Android O:服务未被后台执行限制停止
Android O: Service not stopped by background execution limits
我的背景 Service
运行 在 Android O 上遇到了一个奇怪的行为。
我的示例应用程序使用 targetSdkVersion 26
我有一个简单的服务,它只打印出一些状态信息并应使用 START_STICKY
:
重新创建
class ServiceTest : Service() {
companion object {
private val TAG = "ServiceTest"
fun buildIntent(context: Context): Intent {
return Intent(context, ServiceTest::class.java)
}
}
override fun onBind(p0: Intent?): IBinder? {
return null
}
override fun onCreate() {
super.onCreate()
Log.d(TAG, "onCreate")
}
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
Log.d(TAG, "onStartCommand: startId = " + startId)
return START_STICKY
}
override fun onDestroy() {
Log.d(TAG, "onDestroy")
super.onDestroy()
}
}
服务在 Activity:
内启动
startService(ServiceTest.buildIntent(applicationContext))
当我启动服务并随后通过按后退按钮离开应用程序时,一切都按预期进行:
08-17 16:30:25.182 8980-8980/de.continental.android.androidoservicetest D/ServiceTest: onCreate
08-17 16:30:25.184 8980-8980/de.continental.android.androidoservicetest D/ServiceTest: onStartCommand: startId = 1
08-17 16:31:26.799 900-924/? W/ActivityManager: Stopping service due to app idle: u0a141 -1m1s629ms de.continental.android.androidoservicetest/.ServiceTest
08-17 16:31:26.804 8980-8980/de.continental.android.androidoservicetest D/ServiceTest: onDestroy
但是,如果我启动服务;按后退按钮离开应用程序,最后通过滑动将其从最近的应用程序列表中删除,我的服务按预期重新启动(由于 START_STICKY)。但是由于在定义的时间段后后台操作限制,该服务不会被 Android OS 终止。看来我的服务一直在 运行 而 OS 并没有停止它。
08-17 16:23:13.090 8914-8914/de.continental.android.androidoservicetest D/ServiceTest: onCreate
08-17 16:23:13.091 8914-8914/de.continental.android.androidoservicetest D/ServiceTest: onStartCommand: startId = 1
08-17 16:23:18.600 900-3234/? W/ActivityManager: Scheduling restart of crashed service de.continental.android.androidoservicetest/.ServiceTest in 1000ms
08-17 16:23:19.635 900-924/? I/ActivityManager: Start proc 8980:de.continental.android.androidoservicetest/u0a141 for service de.continental.android.androidoservicetest/.ServiceTest
08-17 16:23:20.158 8980-8980/? D/ServiceTest: onCreate
08-17 16:23:20.160 8980-8980/? D/ServiceTest: onStartCommand: startId = 3
有没有人遇到同样的问题或有解释?
我认为这是一个真正的错误,看看:
https://issuetracker.google.com/issues/64535598
错误跟踪器中还有另一个问题,表明此问题已修复:
https://issuetracker.google.com/issues/65335068
很遗憾,没有提供发布信息。
我的背景 Service
运行 在 Android O 上遇到了一个奇怪的行为。
我的示例应用程序使用 targetSdkVersion 26
我有一个简单的服务,它只打印出一些状态信息并应使用 START_STICKY
:
class ServiceTest : Service() {
companion object {
private val TAG = "ServiceTest"
fun buildIntent(context: Context): Intent {
return Intent(context, ServiceTest::class.java)
}
}
override fun onBind(p0: Intent?): IBinder? {
return null
}
override fun onCreate() {
super.onCreate()
Log.d(TAG, "onCreate")
}
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
Log.d(TAG, "onStartCommand: startId = " + startId)
return START_STICKY
}
override fun onDestroy() {
Log.d(TAG, "onDestroy")
super.onDestroy()
}
}
服务在 Activity:
内启动startService(ServiceTest.buildIntent(applicationContext))
当我启动服务并随后通过按后退按钮离开应用程序时,一切都按预期进行:
08-17 16:30:25.182 8980-8980/de.continental.android.androidoservicetest D/ServiceTest: onCreate
08-17 16:30:25.184 8980-8980/de.continental.android.androidoservicetest D/ServiceTest: onStartCommand: startId = 1
08-17 16:31:26.799 900-924/? W/ActivityManager: Stopping service due to app idle: u0a141 -1m1s629ms de.continental.android.androidoservicetest/.ServiceTest
08-17 16:31:26.804 8980-8980/de.continental.android.androidoservicetest D/ServiceTest: onDestroy
但是,如果我启动服务;按后退按钮离开应用程序,最后通过滑动将其从最近的应用程序列表中删除,我的服务按预期重新启动(由于 START_STICKY)。但是由于在定义的时间段后后台操作限制,该服务不会被 Android OS 终止。看来我的服务一直在 运行 而 OS 并没有停止它。
08-17 16:23:13.090 8914-8914/de.continental.android.androidoservicetest D/ServiceTest: onCreate
08-17 16:23:13.091 8914-8914/de.continental.android.androidoservicetest D/ServiceTest: onStartCommand: startId = 1
08-17 16:23:18.600 900-3234/? W/ActivityManager: Scheduling restart of crashed service de.continental.android.androidoservicetest/.ServiceTest in 1000ms
08-17 16:23:19.635 900-924/? I/ActivityManager: Start proc 8980:de.continental.android.androidoservicetest/u0a141 for service de.continental.android.androidoservicetest/.ServiceTest
08-17 16:23:20.158 8980-8980/? D/ServiceTest: onCreate
08-17 16:23:20.160 8980-8980/? D/ServiceTest: onStartCommand: startId = 3
有没有人遇到同样的问题或有解释?
我认为这是一个真正的错误,看看: https://issuetracker.google.com/issues/64535598
错误跟踪器中还有另一个问题,表明此问题已修复:
https://issuetracker.google.com/issues/65335068
很遗憾,没有提供发布信息。