Android服务被杀死[重复]

Posted

技术标签:

【中文标题】Android服务被杀死[重复]【英文标题】:Android service getting killed [duplicate] 【发布时间】:2021-01-07 16:12:42 【问题描述】:

我正在尝试制作一个 android 应用程序。当手机连接到特定的 wifi 网络时,它应该做一些事情,其余时间什么都不做。我使用ServiceBroadcastReceiver。一切正常,但是在我隐藏我的应用程序后的几秒钟内,检查 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 中被杀死时,服务也会被杀死

后台服务在android中被杀死

Android:在应用程序被杀死后从小部件中查找服务是不是正在运行

应用程序被杀死时Android后台服务正在重新启动

Android:当应用程序被杀死时保持服务运行

Android应用程序及其服务在打开某些应用程序后被杀死