安卓O:服务未被后台执行限制停止

8
我在 Android O 上运行我的后台 Service 时遇到了奇怪的行为。
我的示例应用程序使用 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在一定时间后不会杀死服务。似乎我的服务正在持续运行,而操作系统没有停止它。

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

有人遇到过同样的问题或者有解释吗?

你的targetSdkVersion是什么? - Oleksandr Karpovich
目标 SDK 版本为 26。 - Christopher
我正要发布同样的问题。我看到完全相同的行为。这是一个错误吗? - Ido Sofi
2个回答

2

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接