在OPPO、VIVO、小米安卓7.1.2版本中,后台服务在被杀死后无法重新启动。

6

即使应用程序被杀死,我希望能够在后台运行服务。这个功能在一些设备上可以正常工作。但是在oppo、小米和vivo手机上,如果应用程序被杀死,它就无法运行。如何在这些设备上实现这个功能?

2个回答

8
  1. 我在Oppo、Vivo、Mi等手机上遇到了同样的问题,从最近的应用程序中移除后,应用程序甚至服务也会被杀死。

    解决方案:我在应用程序中添加了自启动权限,类似这个,然后问题得到了解决。

  2. 解决了这个问题之后,我的应用程序在后台运行一段时间后会因为DOZE模式而被冻结/杀死。

解决方案:对于这种情况,这个方法可以解决问题,现在我的应用程序可以在任何设备上后台运行。


1
如果这个回答解决了你的问题,请接受/点赞它。 - Amin Pinjari
对我来说没有用。你知道我们还有什么其他方法可以避免服务被杀掉吗? - Edijae Crusar
请分享您的代码,这个答案一定会对您有所帮助。 - Amin Pinjari
@AminPinjari,我尝试了你的建议,现在我的应用程序可以在一加和小米设备上运行,但在OPPO上无法工作。 你能分享一些示例代码吗?先感谢了。 - Ashish
你找到解决方案了吗?很抱歉回复晚了。 - Amin Pinjari
显示剩余2条评论

1
为了使在中国制造的设备中运行的服务能够持续在后台运行,我们需要使用多种方法来覆盖它。
  1. 在应用程序设置中启用自动启动权限。对于自动启动代码,您可以使用此代码:[https://github.com/judemanutd/AutoStarter][1]

  2. 如果您没有在应用程序设置中启用自动启动选项,则在中国设备上不会调用onTaskRemoved。

  3. 在中国设备上,只有在允许自动启动权限后才会调用onTaskRemoved。

在Service的onTaskRemoved中添加此代码片段:

override fun onTaskRemoved(rootIntent: Intent?) {
        log("onTaskRemoved is called::")
        val restartServiceTask = Intent(applicationContext, EndlessService::class.java)
        restartServiceTask.setPackage(packageName)
        restartServiceTask.action = Actions.START.toString()
        val pendingIntent = PendingIntent.getService(this, 1, restartServiceTask, PendingIntent.FLAG_ONE_SHOT)
        val alarmManager = getSystemService(ALARM_SERVICE) as AlarmManager
        alarmManager[AlarmManager.RTC_WAKEUP, SystemClock.elapsedRealtime() + 1000] =
            pendingIntent
        super.onTaskRemoved(rootIntent)
    } 

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