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

我正在尝试制作一个 android 应用程序。当手机连接到特定的 wifi 网络时,它应该做一些事情,其余时间什么都不做。我使用ServiceBroadcastReceiver。一切正常,但是在我隐藏我的应用程序后的几秒钟内,检查 wifi 状态的服务会无缘无故地被杀死。有没有可能让它持久化? 我知道android:persistent 标志,但它对我来说似乎没用,因为我的应用不是系统。

【问题讨论】:

    标签: android kotlin service wifimanager


    【解决方案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))
                }
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-17
      • 2012-08-26
      相关资源
      最近更新 更多