我正在尝试让我的应用程序在 Android 9 上运行。以下代码在 Android 8 上运行良好,但由于某种原因,JobService 不会在 android 9 上重新安排。它第一次被安排,但不会根据到设定的周期。
class RetrieveJobService : JobService() {
override fun onStartJob(params: JobParameters): Boolean {
doBackgroundWork(params)
return true
}
private fun doBackgroundWork(params: JobParameters) {
Thread {
try {
doRetrieveBackgroundStuff(this)
jobFinished(params, false)
} catch (e: Exception) {
jobFinished(params, false)
}
}.start()
}
override fun onStopJob(params: JobParameters): Boolean {
return false
}
}
这是我的 JobInfo.Builder
val builder = JobInfo.Builder(jobID, componentName)
.setPersisted(true)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
builder.setPeriodic(millis, 15 * 60 * 1000) //15 min
} else {
builder.setPeriodic(millis)
}
builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
val scheduler = context.getSystemService(JOB_SCHEDULER_SERVICE) as
JobScheduler
val resultCode = scheduler.schedule(builder.build())
有任何想法吗?
编辑:需要明确的是,此代码在 Android 8 及更低版本上运行良好,并且也可以在运行 Android 9 的 Android Studio 模拟器上运行。据我测试,它不适用于运行 Android 9 的任何物理设备。
如果你经过THE LINK https://issuetracker.google.com/issues/110745313, 你会找到:
不幸的是,某些设备会从最近使用的菜单中终止该应用程序作为强制停止。普通 Android 不会这样做。当应用程序被强制停止时,它无法执行作业、接收警报或广播等。因此不幸的是,我们无法解决它 - 问题在于操作系统,并且没有解决方法。
这是一个已知问题。为了节省电量,许多制造商强制关闭应用程序,从而取消所有期间任务、闹钟和广播接收器等。主要制造商是OnePlus(您可以选择切换)、Redmi、Vivo、Oppo、Huwaei。
UPDATE
这些设备中的每一个都有 AutoStartManagers/AutoLaunch/StartManager 类型的优化管理器。这可以防止后台活动再次启动。您必须手动要求用户将您的应用程序列入白名单,以便应用程序可以自动启动其后台进程。跟随THIS https://medium.freecodecamp.org/why-your-push-notifications-never-see-the-light-of-day-3fa297520793 and THIS https://support.kayako.com/article/1461-why-aren-t-push-notifications-working-on-my-android-app链接,了解更多信息。
不同厂家添加白名单的方法参见这个 stackoverflow 答案 https://stackoverflow.com/a/48641229/7976274。即使添加到白名单后,您的应用程序也可能因打瞌睡模式而无法运行,为此您必须忽略电池优化 https://riptutorial.com/android/example/24632/whitelisting-an-android-application-programmatically
另外,如果您可能想知道,Gmail/Hangout/WhatsApp/Slack/LinkedIn 等应用程序已被这些自动启动管理器列入白名单。因此,对其后台进程没有影响。您始终会收到及时的更新和通知。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)