Android服务被杀死[重复]
Posted
技术标签:
【中文标题】Android服务被杀死[重复]【英文标题】:Android service getting killed [duplicate] 【发布时间】:2021-01-07 16:12:42 【问题描述】:我正在尝试制作一个 android 应用程序。当手机连接到特定的 wifi 网络时,它应该做一些事情,其余时间什么都不做。我使用Service
和BroadcastReceiver
。一切正常,但是在我隐藏我的应用程序后的几秒钟内,检查 wifi 状态的服务会无缘无故地被杀死。有没有可能让它持久化?
我知道android:persistent
标志,但它对我来说似乎没用,因为我的应用不是系统。
【问题讨论】:
【参考方案1】:从 Android Oreo 开始,应用程序关闭时不允许运行后台服务,因此您必须在前台启动它(Google 建议使用 JobScheduler for SDK > Oreo)。这当然不是完美的解决方案,但应该可以帮助您入门。
class NotificationService: Service()
private var notificationUtils = NotificationUtils(this)
private var notificationManager: NotificationManager? = null
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int
super.onStartCommand(intent, flags, startId)
return START_STICKY
override fun onCreate()
super.onCreate()
//here checking if sdk > Oreo then start foreground or it will start by default on background
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
startForeground(System.currentTimeMillis().toInt(), notificationUtils.foregroundNotification())
override fun onDestroy()
super.onDestroy()
// when the OS kills the service send a broadcast to restart it
val broadcastIntent = Intent(this, NotificationServiceRestarterBroadcastReceiver::class.java)
sendBroadcast(broadcastIntent)
override fun onBind(intent: Intent?): IBinder?
return null
class NotificationServiceRestarterBroadcastReceiver : BroadcastReceiver()
override fun onReceive(context: Context, intent: Intent?)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
context.startForegroundService(Intent(context, NotificationService::class.java))
else
// if sdk < Oreo restart the background service normally
context.startService(Intent(context, NotificationService::class.java))
【讨论】:
以上是关于Android服务被杀死[重复]的主要内容,如果未能解决你的问题,请参考以下文章
每当 App 在 android pie 中被杀死时,服务也会被杀死