问题标签 [jobintentservice]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
35 浏览

android - 由 java.lang.RuntimeException 引起:无法在未调用 Looper.prepare() 的线程内创建处理程序

离线调用此问题时在 JobIntentService 中初始化 Handler

请参考以下代码:

我在初始化处理程序的行出现错误。当应用程序离线时也会发生这种情况。在线场景工作正常。看起来真的很奇怪

0 投票
0 回答
152 浏览

android - 在 JobIntentService 中运行 FileObserver

我的应用程序FileObserver在服务内部运行(该服务在创建临时文件后 10 分钟运行,它会观察该文件 60 秒,以便在不使用时将其删除)。

由于 Android 8 的限制,我无法从后台启动服务。AFAIK 的替代品是:

  1. 运行前台服务(但我不想显示通知图标)
  2. 使用JobService(但仅从 API 21 开始可用)
  3. 利用JobIntentService

JobIntentService在后台线程上运行onHandleWork,返回后,工作将被视为完成。所以,问题是:

我怎样才能等到FileObserver完成?可以使用类似的东西while(!fileObserverFinished) Thread.sleep(100);吗?有没有更好的办法?

0 投票
1 回答
1493 浏览

android - Android JobIntentService ADB 错误:需要权限 android.permission.BIND_JOB_SERVICE

我正在尝试设置 JobIntentService 并使用 adb 对其进行测试。

当我使用这个命令时:

它产生错误:

我的 AndroidManifest.xml 有以下条目:

0 投票
1 回答
2037 浏览

android - Android:如何修复通知的递增 setNumber()?

我使用JobIntentService从 a 启动的BroadcastReceiver方法向用户发送通知,告知到期日期已近。当另一个到期日的下一个通知临近时,我只想更新现有的通知并将 setNumber() 指示器增加 +1。第一个通知将“totalMesssages”变量正确增加 +1,并且 setNumber() 在通知下拉对话框中显示“1”。下一个通知正确触发,但 setNumber() 不会增加 +1 到“2”。它保持在“1”。

我在这里想念什么?

0 投票
1 回答
8521 浏览

android - SecurityException:调用者不再运行

在尝试运行JobIntentService时,我在Android O 及更高版本中面临以下问题,我很难重现该问题:

0 投票
1 回答
2362 浏览

notifications - Android:如何修复 JobIntentService 中的 BroadcastReceiver?

我有一个带有触发 BroadcastReceiver 的 AlarmManager 的 Activity。BroadcastReceiver 触发 JobIntentService 以向用户发送通知。

当用户点击“全部清除”或滑动以关闭通知时,我希望 setDeleteIntent() 将我在 SharedPreferences 文件中设置的计数器变量“totalMessages”重置为零。它不会重置为零。我在这里想念什么?

0 投票
2 回答
1220 浏览

android - 地理围栏不再适用于 JobIntentService

我有一个用于地理围栏的 IntentService,我只是开始。但它必须在后台运行,因此在 Android 8 中它有时会被列入白名单。所以我很难我需要使用 JobIntentService: https ://developer.android.com/reference/android/support/v4/app/JobIntentService 还看了这个:Android 8.0: java.lang.IllegalStateException: Not allowed to start service意图

这是我的 onHandleIntent() ,我将在其中收到我的地理围栏电话:

这是我的 Intent 服务代码,添加地理围栏逻辑:

现在我改为了 JobIntentService。

我像这样运行服务:

我还将它添加到我的 Android 清单中:

我在新的 onHandleWork 中处理 onHandleIntent 的内容

现在我从地理围栏获得 onHandleWork 事件,但只有转换类型 = -1。所以我没有收到 ENTER 或 EXIT 事件。为什么或如何修复此地理围栏服务?

0 投票
1 回答
1060 浏览

android - 保持 JobIntentService 在内部运行异步任务

我想在我的应用程序中开发文本转语音 (TTS) 功能。它必须在内部实现Service,因为用户可能会离开“详细信息”Activity并返回“主要”Activity甚至离开我的应用程序,它仍然应该大声说出文本。由于奥利奥为服务引入了一些后台限制,我必须支持 4.0+ 我必须使用JobIntentService

问题是 TTS 有异步实现并且在完成工作JobIntentService后被杀死onHandleWork,即使我使用startForeground(在我的代码中showSpeakingNotification

有趣的是,当我onHandleWork在 'speakOut' 方法之后的断点或只是取消注释Thread.sleep服务正在工作并阅读我的文本时(并且存在前台通知)。

问题是如何防止在我的服务实际运行时“自动杀死”我的服务,但在内部使用异步功能?

0 投票
1 回答
639 浏览

android - 处理 JobIntentService 和线程休眠

背景:

最近我不得不将一个服务迁移到 JobIntentService (JIS) 以支持 Android 8.0 后台服务限制。此服务在 FirebaseInstanceIDService 调用它后将令牌注册到我的服务器。

问题:

我有一个必须从 JobIntentService (JIS) 进行的网络调用。所有的网络调用操作都是通过 Eventbus (EB) 处理的。

流程如下

您可能已经猜到的问题是,当请求 API 事件被触发时,Intent 服务会自行完成并且不处理响应事件。

临时解决方案:

我以一种肮脏的方式解决这个问题的方法是在触发事件后立即调用 Thread.sleep(400)。(API 大约需要 150 毫秒来响应)

这可确保在 API 响应事件到达时 JIS 仍在处理响应。


我想确认这是否是正确的方法(因为这对我来说感觉像是一种蛮力)或者是否有更清洁的方法。

0 投票
1 回答
618 浏览

android - 使用 JobIntentService 在 Oreo 上不刷新主页小部件

我的应用程序包含使用定期更新的家庭小部件IntentService

现在,当面向 API 级别 26 时,由于 Oreo 的限制,我不得不稍微改变一下。你可以在这里找到更多信息。

我发现这篇文章描述了如何使 IntentService 在 Oreo 上工作。

我按照描述做了所有事情:

  • 将我的转换IntentServiceJobIntentService
  • 将所有逻辑onHandleIntent()onHandleWork()
  • 在 AndroidManifest 文件中添加android:permission="android.permission.BIND_JOB_SERVICE"到服务中
  • 另外,<uses-permission android:name=”android.permission.WAKE_LOCK” />已经在这个项目中使用
  • 我更进一步,开始使用以下逻辑来启动服务:enqueueWork(context, LocationForecastService.class, JOB_ID, work);

它仍然没有正确刷新或初始化小部件。服务实际启动,下载数据,但问题可能出在通过广播发送数据的某个地方。它在 API 级别设置为 24 时有效。

小部件在 AndroidManifest 文件中注册为 BroadcastReceivers,如下所示:

有人遇到过类似的问题吗?