作业计划程序未在 Android N 上运行

2024-04-17

作业计划程序在 Android Marshmallow 和 Lollipop 设备上按预期工作,但在 Nexus 5x(Android N 预览版)上未运行。

安排作业的代码

        ComponentName componentName = new ComponentName(MainActivity.this, TestJobService.class.getName());
        JobInfo.Builder builder;
        builder = new JobInfo.Builder(JOB_ID, componentName);
        builder.setPeriodic(5000);
        JobInfo jobInfo;
        jobScheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);
        jobInfo = builder.build();
        int jobId = jobScheduler.schedule(jobInfo);

服务在清单中定义为:

<service android:name=".TestJobService"
            android:permission="android.permission.BIND_JOB_SERVICE" />

有人在 Android N(预览版)上遇到此问题吗?


在 Android 牛轧糖中setPeriodic(long intervalMillis) https://developer.android.com/reference/android/app/job/JobInfo.Builder.html#setPeriodic(long)方法调用利用setPeriodic (long intervalMillis, long flexMillis) https://developer.android.com/reference/android/app/job/JobInfo.Builder.html#setPeriodic(long,%20long)安排定期作业。

根据文档:

JobInfo.Builder setPeriodic(长intervalMillis,长flexMillis)

指定该作业应按照提供的间隔重复执行,并且 柔性。该作业可以在弹性长度的窗口中随时执行 期末。

间隔毫秒长:此作业将重复的毫秒间隔。强制执行 getMinPeriodMillis() 的最小值。

flexMillis 长:这项工作的毫秒级弹性。 Flex 至少被限制为 getMinFlexMillis() 或周期的 5%,以较高者为准。

安排 5 秒的定期作业示例:

private static final int JOB_ID = 1001;
private static final long REFRESH_INTERVAL  = 5 * 1000; // 5 seconds

JobInfo jobInfo = new JobInfo.Builder(JOB_ID, serviceName)
        .setPeriodic(REFRESH_INTERVAL)
        .setExtras(bundle).build();

上面的代码在 Lollipop 和 Marshmallow 中运行良好,但是当您在 Nougat 中运行时,您会注意到以下日志:

W/JobInfo: Specified interval for 1001 is +5s0ms. Clamped to +15m0s0ms
W/JobInfo: Specified flex for 1001 is +5s0ms. Clamped to +5m0s0ms

由于我们将定期刷新间隔设置为 5 秒,小于阈值getMinPeriodMillis()。 Android Nougat 强制执行getMinPeriodMillis().

作为解决方法,如果作业间隔小于 15 分钟,我将使用以下代码定期安排作业。

JobInfo jobInfo;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
  jobInfo = new JobInfo.Builder(JOB_ID, serviceName)
      .setMinimumLatency(REFRESH_INTERVAL)
      .setExtras(bundle).build();
} else {
  jobInfo = new JobInfo.Builder(JOB_ID, serviceName)
      .setPeriodic(REFRESH_INTERVAL)
      .setExtras(bundle).build();
}

JobService 示例:

public class SampleService extends JobService {
    @Override public boolean onStartJob(JobParameters params) {
        doSampleJob(params); 
        return true;
    }

    @Override public boolean onStopJob(JobParameters params) {
        return false;
    }

    public void doSampleJob(JobParameters params) {
        // Do some heavy operation
        ...... 
        // At the end inform job manager the status of the job.
        jobFinished(params, false);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

作业计划程序未在 Android N 上运行 的相关文章

  • 显示警报或收到通知时的视图

    我正在关注this http tokudu com 2010 how to implement push notifications for android 显示的教程通知 on an 安卓设备 当我在设备上运行该应用程序时 状态栏上会出现
  • 使用 Google Places Autocomplete API 的 REQUEST_DENIED 响应

    我正在开发 Android 应用程序 它使用谷歌的地点自动完成 API 当尝试点击以下网址时 我得到的答复如下 预测 状态 REQUEST DENIED 我从下面的链接获得了 API 密钥Google API 控制台 http code g
  • 按钮未显示在屏幕上

    我创建了一个应用程序 其中显示带有图像和文本的列表视图 我在页面末尾添加按钮 但这没有显示在屏幕上 我是 Android 新手 我该如何解决这个问题 这是我的 UI XML 代码
  • 访问角落里的存储

    我能找到的与文件存储有关的最接近文档的是这个帖子 http nookdeveloper zendesk com entries 20257971 updated what are the size constraints on my app
  • Android - 当不在栏顶部时推送通知空白

    我在使用 Android 推送通知时遇到一个小问题 如果有 3 个通知 并且只有其中一个显示标题和消息 位于酒吧顶部的那个 如果有人知道可能是什么问题 请告诉我 请参阅此链接上的图像 这就是我接收通知的方式http postimg org
  • Android-工具栏中的SearchView

    我只想在我的应用程序中添加 searchview 但我不想搜索任何东西 只是我想要用户输入的查询 到目前为止 我尝试了这段代码 但是当我运行我的应用程序时它崩溃了 Update 我尝试了这个 但即使我的应用程序崩溃了 main menu x
  • 使用 Android 播放任意音调

    有没有办法让Android发出任意频率的声音 意思是 我不想预先录制声音文件 我环顾四周 音调发生器 http developer android com reference android media ToneGenerator html
  • SQLite支持android的数据类型有哪些

    谁能告诉我 SQLITE 中支持 ANDROID 的数据类型列表 我想确认 TIME 和 DATE 数据类型 这里有一个list http www sqlite org datatype3 htmlSQLite 的数据类型 支持时间和日期间
  • 监听什么来检测 Android 中的请勿打扰模式更改?

    我希望我的应用程序在手机设置为请勿打扰模式 仅限闹钟 仅限优先级或完全静音 时显示通知 通过聆听 这效果非常好android media RINGER MODE CHANGED在快速设置中检查此模式并在已选择的选项卡中选择模式时 但是 当选
  • 获取可以共享数据的应用程序列表

    此代码显示默认共享对话框 Intent sharingIntent new Intent Intent ACTION SEND sharingIntent setType text html sharingIntent putExtra a
  • 如何在 iOS 应用程序中通过其他应用程序共享内容/数据,就像我们在 Android 应用程序中使用 Intent.ACTION_SEND 所做的那样?

    在Android中 我们可以通过Intent ACTION SEND startactivity api轻松共享内容 文本 图像 视频等 我已经有一个应用程序可以完美地做到这一点 并且有一个并行的 iOS 应用程序 我希望它能够实现相同的功
  • Android模拟器分配内存失败8

    当我尝试从 Eclipse 运行 WXGA800 模拟器时 出现如下错误 Failed to allocate memory 8 This application has requested the Runtime to terminate
  • 加快 ImageView 中的缩放功能

    我目前正在处理非常大的图像 7 10mb 由于多种原因无法调整大小或压缩 现在 我们的想法是在自定义 ImageView 中显示它们 使用户能够进行双击缩放 捏合缩放等 我使用这个库来完成这项工作 https github com Mike
  • 通过列表视图检查动态生成的复选框时遇到问题

    我知道其他成员已经提出了这个问题 一些成员也给出了解决方案 但问题是我没有找到任何适合我的应用程序的解决方案 我正在创建一个应用程序 其中我有一个屏幕 它将显示动态列表视图 其中包含列表项 复选框和三个文本视图 一个用于候选人姓名 另外两个
  • jar 中的 apklib 有什么优点?

    我正在关注这个问题 https stackoverflow com questions 6059502 whats the difference between apklib and jar files但它并没有完全回答我的问题 jar 中
  • android 中camera.setParameters 失败

    我已将相机功能包含在我的应用程序中 我还在市场上推出了该应用程序 我从一位用户那里收到一条错误消息 称他在打开相机时遇到错误 我已经在 2 1 的设备上测试了该应用程序 我从用户那里得到的错误是使用 Nexus One 它主要运行 2 2
  • Android:打开和关闭SQLite数据库

    我正在开发Android应用程序 我经常在其中访问本地数据库 该数据库可以从不同的主题访问 因此我遇到了数据库的协调问题 我使用以下open and close method public void open mDb mDbHelper g
  • 检测 ListView(或 ScrollView)内的滚动位置

    我正在构建一个聊天室应用程序 其中每 X 秒就会轮询一次新事件 每次发生这种情况时 此代码都会使用新数据更新 RoomAdapter ArrayAdapter 的自定义子类 并将其滚动到底部 RoomAdapter adapter Room
  • 在 Android 中上传文件出现内存不足错误

    我的上传代码如下 String end r n String twoHyphens String boundary try URL url new URL ActionUrl HttpURLConnection con HttpURLCon
  • “无法实例化活动”错误

    我的一个 Android 应用程序拥有大约 100 000 个用户 每周大约 10 次 我会通过 Google 的市场工具向我报告以下异常情况 java lang RuntimeException Unable to instantiate

随机推荐

  • dyld:未加载库:@rpath/SwiftyJSON.framework/SwiftyJSON

    我一直在使用模拟器来测试我的应用程序 今天 我决定在模拟器中使用其他设备来测试它 令我惊讶的是 它在某些设备上启动时崩溃 而在其他设备上却运行得很好 我的应用程序构建运行于 iPad Air 可调整大小的iPad iPhone 5S iPh
  • 在结构体中动态分配结构体

    我正在动态分配一个具有不同结构作为成员的结构 struct a other members struct b struct b基本上持有一个指向另一个的指针struct b 所以想到struct b作为链接列表 如果我动态分配struct
  • 派生类作为默认参数 g++

    请看一下这段代码 template
  • 如何在java中使用twitter4j发布推文?

    我可以使用 twitter4j 登录 twitter 并获取有关登录用户的信息 但我无法从我的应用程序发布推文 我正在使用 Java Web 应用程序来发布推文 请参阅下面我使用的代码 String ACCESS TOKEN ttttttt
  • boost read_until 不会在分隔符处停止

    我使用 boost read until 函数来促进通过套接字接收和解析 HTTP 消息 所以我是什么trying要做的就是从套接字中 read until 直到 r n 我认为应该给我一行 HTTP 标头 每个 HTTP 标头行以 r n
  • 如何在 Windows 计算机上编译适用于 Linux 的 .NET Core 应用程序

    我正在 Windows 10 计算机上开发一个 NET Core 应用程序 使用 Visual Studio 2015 update 3 Microsoft NET Core 1 0 1 VS 2015 Tooling Preview 2
  • 是否可以在具有 $elemMatch 投影的同一集合上使用查询投影?

    我知道您可以使用以下方法限制子集合数组中的项目 elemMatch http docs mongodb org manual reference operator projection elemMatch 作为投影 当这样使用它时 它会返回
  • 分割视图控制器必须是根视图控制器

    每当我尝试以模态方式呈现 UISplitViewController 时 应用程序就会崩溃 因此它必须始终是根视图控制器 谁能证实这一点吗 来自Apple iPad 编程指南 http developer apple com iphone
  • ROracle dbWriteTable 为 R DATE 列创建 Oracle TIMESTAMP 列

    我正在尝试在 Windows 7 64 位上使用 64 位 R3 0 0 中的 ROracle 包 1 1 10 将一些数据上传到我的 Oracle 11g 数据库 ROracle 帮助dbWriteTable states 日期和 POS
  • 在 Pandas 图中添加图例

    我正在使用 Pandas Plot 绘制密度图 但我无法为每个图表添加适当的图例 我的代码和结果如下 for i in tickers df pd DataFrame dic 2 i mean np average dic 2 i std
  • Telegram (Telesharp) - 海量请求(讨论防洪限制)

    我在用着TLSharp https github com sochix TLSharp用于连接到 Telegram 服务 我想搜索 400 000 个频道 请致电服务人员搜索用户异步40万次 我每 15 秒调用一次此服务 但我得到了 1 天
  • Python 读取命名为 PIPE

    我在 linux 中有一个命名管道 我想从 python 中读取它 问题在于 python 进程连续 消耗 一个核心 100 我的代码如下 FIFO var run mypipe os mkfifo FIFO with open FIFO
  • 如何解决 Heroku 上部署的 python 应用程序上的“500 内部服务器错误”?

    基本上 我有一个即将到来的学校项目 任何计算机科学主题 我决定构建一个元数据查看器 我不是程序员或编码员 我的编码课程今年开始 这个项目只是为了介绍 我可以使用在线资源 所以 我刚刚看到了这个GitHub 存储库 https github
  • 如何 git 推送 reflog?

    有没有办法将引用日志推送到远程 这似乎是一件非常有用的事情 但我不知道如何做到这一点 我正在设想类似的事情git push include reflogs 最后 我希望遥控器在推送时有一份引用日志的逐字副本 我尝试使用 mirror 但是
  • 如何使用 Qt 使用鼠标更改网格布局单元格的大小?

    我使用网格布局 水平和垂直 我喜欢这样一个事实 调整窗口大小时会填充整个窗口内容 但这个扩展管理不善 我经常想只改变网格布局中一列的大小而不改变窗口的大小 例如在 Windows 资源管理器中 有两列 左侧的目录列表及其从左侧到右侧的内容
  • 将 pandas groupby 结果合并回 DataFrame

    我有一个看起来像这样的数据框 idn value 0 ID1 25 1 ID1 30 2 ID2 30 3 ID2 50 我想在此框架中添加另一列 即按 idn 分组的最大 值 我想要一个看起来像这样的结果 idn value max va
  • SD卡传输(存储空间不足)

    我试图让我的应用程序能够移动到 SD 卡 到目前为止 我已将属性 android installLocation auto 添加到我的清单文件中 当我尝试在手机上将应用程序的存储选项从内部移动到外部 75MB 时 可以选择移动它 但在完成
  • 通过 HTTPS 的 Ajax GET 请求

    我怎样才能发送ajaxGET请求结束HTTPS get抛出这个 XMLHttpRequest cannot load https Origin null is not allowed by Access Control Allow Orig
  • 让人们在电影院就座

    这是基于我读到的一篇关于大型软件公司提出的谜题和面试问题的文章 但它有一个转折 一般问题 有一种算法可以让人们在电影院就座 让他们直接坐在朋友旁边 而不是敌人旁边 技术问题 给定一个 N M 网格 用 N M 1 项填充网格 每个项目都有一
  • 作业计划程序未在 Android N 上运行

    作业计划程序在 Android Marshmallow 和 Lollipop 设备上按预期工作 但在 Nexus 5x Android N 预览版 上未运行 安排作业的代码 ComponentName componentName new C