200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > java设置手机后台进程限制_当应用程序在Android Pie上受到后台限制时启动前台服务...

java设置手机后台进程限制_当应用程序在Android Pie上受到后台限制时启动前台服务...

时间:2019-05-17 12:17:35

相关推荐

java设置手机后台进程限制_当应用程序在Android Pie上受到后台限制时启动前台服务...

使用Android 9.0(Pie),用户可以限制您的应用程序通过设置进行后台工作 . 当我们尝试在Pie设备上启动前台服务时,如果应用程序受到后台限制,即使应用程序活动完全位于前台,我们的应用程序也会遇到以下异常 .

RemoteServiceException: Context.startForegroundService() did not then call Service.startForeground()

我们在启动的服务中调用startForeground(),但尝试启动服务时的系统日志显示:

system_process W/ActivityManager: Service.startForeground() not allowed due to bg restriction

当您关注the documented steps前台服务时,看起来很奇怪,以及当您的应用程序仍位于前台时,系统拒绝启动前台服务的应用程序 . 我还没有找到与此相关的大量文档,但这是记录在案的行为吗?您的应用程序是否至少有一种方法可以知道它是否受到后台限制,因此不会尝试在前台启动服务?

我的服务代码基本上如下所示 . 我们的目标api是27 .

class MyService : Service() {

override fun onCreate() {

super.onCreate()

// create notification

startForeground(NOTIFICATION_ID, notification)

}

override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {

if (intent == null || intent.action == null || intent.action == ACTION_STOP) {

quit()

}

doWork()

return START_NOT_STICKY

}

override fun onBind(intent: Intent?): IBinder? {

return null

}

override fun onTaskRemoved(rootIntent: Intent?) {

super.onTaskRemoved(rootIntent)

quit()

}

private fun quit() {

stopForeground(true)

stopSelf()

}

companion object {

fun start(context: Context) {

val intent = Intent(context, MyService::class.java)

intent.action = ACTION_START

ContextCompat.startForegroundService(context, intent)

}

fun stop(context: Context) {

val intent = Intent(context, MyService::class.java)

intent.action = ACTION_STOP

ContextCompat.startForegroundService(context, intent)

}

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。