JobService 在 android 9 中不会重新安排

2024-05-04

我正在尝试让我的应用程序在 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(使用前将#替换为@)

JobService 在 android 9 中不会重新安排 的相关文章

随机推荐

  • 在 npm 脚本中匹配多个文件扩展名

    我有一个 npm 脚本 我想在其中匹配两者ts and tsx文件扩展名 如下所示 test mocha app test spec ts tsx 但是 上面的语法不起作用 执行此操作的正确语法是什么 你的模式是正确的 你的问题是你的 sh
  • 寻找仅 php 电子邮件地址混淆器功能

    有没有仅适用于 php 的电子邮件地址混淆器功能 网上找到的大多数都是 JS 和 PHP 的混合体 这是我使用的几个函数 第一个使用 html 字符代码混淆电子邮件地址 function getObfuscatedEmailAddress
  • 将副词应用于动名词列表

    考虑一个动名词列表和一些我们希望循环应用它们的数据 ms NB list of gerunds d 3 4 5 6 NB some data 我们可以做的 ms d NB returns 9 ie the result of 3 4 5 6
  • Jupyter Notebook仅适用于基础环境

    Jupyter 笔记本今天突然停止正常工作 如果我像这样启动 Jupyter 那么一切都在基础环境中正常工作 activate base jupyter notebook 但是在任何其他环境中启动它或者只是在不声明环境的情况下启动它 act
  • 无法加载文件或程序集“App_Web_1btizmpz,

    我遇到以下错误 Could not load file or assembly App Web 1btizmpz Version 0 0 0 0 Culture neutral PublicKeyToken null or one of i
  • setTimeout 调用期间超出最大调用堆栈大小

    我试图每 4 秒调用一次我的函数 这样它就会实时增加一个数字 由于某种原因 我不断收到错误 这是我的代码
  • 如何仅在某些列中设置带有复选框的 TListView?

    我正在使用 Delphi 2010 并且我试图允许用户在 TListView 中的每行 2 个选项之间进行选择 使用 TListView 我可以将样式设置为 vsReport 并启用复选框 但这只会让我每行有 1 个复选框 我需要的是每行
  • 如何在 excel 2007 vba 中以编程方式对一组形状进行分组?

    我正在迭代电气表表上的数据并在形状表上创建形状 创建形状后 我想以编程方式对它们进行分组 但是我无法找出正确的语法 形状就在那里 被选中 如果我单击分组按钮 它们就会完美分组 但是通过下面的代码我得到 运行时错误 438 对象不支持此方法或
  • 使用 MVVM 的 C# 泛型,将 T 从 中取出

    My Model是一个泛型类 包含 例如 Value属性可以是 int float string bool 等 所以很自然地 这个类的表示形式如下Model
  • jQuery:移动窗口视口以显示新切换的元素

    我在文档中有一段 jQuery 代码片段 它可以切换包含 a 的 divtextarea div addnote area hide hide the div a addnote link click function click even
  • Storm动态拓扑

    Storm 支持动态拓扑吗 我想要的功能是在 Storm 拓扑运行时根据用户要求动态更改拓扑 例如 当用户想知道流的前 10 个单词时 我使用前 10 个 Bolt 来处理它 当用户想知道其他内容时 我使用另一个 Bolt 来处理流并 拔掉
  • 使用 jQuery 选择特定 href 的锚标记

    THE AIM 刷新浏览器后 我希望用户保留在刷新之前的菜单 内容中 问题 刷新浏览器后 用户刷新之前所在的特定菜单的内容将显示为活动状态 即显示在屏幕上 但是 该特定内容的菜单图标未显示为活动状态 即 它不显示黑色 我在选择锚元素时遇到困
  • Visual C# 窗体中的控制台

    我想在我的表单中获得一个控制台窗口 基本上当你点击button1 它运行一个批处理脚本 test exe 我不需要单独的批处理窗口 但我希望它显示在我的表单中 我认为可能有两种方法可以做到这一点 要么 1 以某种方式将控制台嵌入到我的表单中
  • PowerShell 中一个命令中的多个前景色

    我想用一个语句输出许多不同的前景色 PS C gt Write Host Red ForegroundColor Red Red 该输出为红色 PS C gt Write Host Blue ForegroundColor Blue Blu
  • 如何关闭使用presentModalViewController打开的视图控制器:

    我使用了一个视图控制器presentModalViewController 现在如何关闭 关闭它 对于 iOS6 使用此代码 self dismissViewControllerAnimated YES completion Nil 代替
  • 我怎样才能重写这个nginx“if”语句?

    例如 我想这样做 if http user agent MSIE 6 0 http user agent MSIE 7 0 etc etc rewrite ROOT ROOT ancient last break 而不是这个 if http
  • document.all 和 document.forms 之间的区别[0]

    任何人都可以解释一下两者之间有什么区别 document all 和document forms 0 please 谢谢 document all为您提供对包含文档所有元素的类数组对象的引用在 Internet Explorer 中 IE
  • 是否可以在切换 QTreeWidgetItem 复选框时创建信号?

    我使用下面的代码创建了一个也是 QTreeWidgetItem 的复选框 Populate list QTreeWidgetItem program createCheckedTreeItem QString fromStdString i
  • Google Cloud ML:输出的外部尺寸必须未知

    我们在本地得到了一个工作的导出模型 正在创建一个新的模型版本谷歌云机器学习如下 Create Version failed Model validation failed Outer dimension for outputs must b
  • JobService 在 android 9 中不会重新安排

    我正在尝试让我的应用程序在 Android 9 上运行 以下代码在 Android 8 上运行良好 但由于某种原因 JobService 不会在 android 9 上重新安排 它第一次被安排 但不会根据到设定的周期 class Retri