问题标签 [foreground-service]
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.
android - 无法从服务启动前台通知?
我想从服务启动前台通知。这是我的代码:
显现 :
广播接收器:
NotificationService.java:
我已在清单中声明广播接收器,因为它接收到电源状态已更改。因此 MainActivity 中没有相关代码。
我在 NotificationService.java 中评论了这一行:
如果我删除评论,我会收到通知。但我想让它坚持通知空间,以便我可以使用该服务执行一些其他操作。
但我无法将其作为前台通知。
android - 我可以在没有 setOngoing(true) 的情况下启动前台服务吗?
我确实有一个在前台启动的服务:
请注意,我没有使用setOngoing(true)
.
我在 StackOveflow 上找到了一些示例和答案,有些人正在使用setOngoing(true)
,有些人没有。例子:
- https://stackoverflow.com/a/6397982/1945754
- https://stackoverflow.com/a/47549638/1945754
- https://stackoverflow.com/a/20142620/1945754
此外,Android 文档说:
前台服务是用户主动了解的服务,并且不是系统在内存不足时终止的候选服务。前台服务必须为位于 Ongoing 标题下的状态栏提供通知。这意味着除非服务停止或从前台删除,否则通知不能被解除。
而且,在文档中,setOngoing(true)
没有设置:
问题
省略的影响是setOngoing(true)
什么?
android - 如何从 NotificationListenerService 停止前台服务
我正在从我的 android 应用程序中的 Intentservice 启动前台服务,服务从通知开始。这就是我开始服务的方式:
我正在 NotificationListenerService 中收听特定应用程序的通知,当该通知被删除时,我正在停止前台服务,但前台服务仍在运行。这就是我停止前台服务的方式:
我找不到任何线索为什么服务没有停止,因为文档还建议使用 stopService() 或 stopSelf() 方法。谁能告诉我我做错了什么或从其他服务停止服务的正确方法是什么。
谢谢。
java - 粘性前台服务无法重新启动并出现“进程错误”错误
我有一个启动的前台服务。我已经小心地从onStartCommand
. 我观察到前台服务不会无限期地运行,而是会被一个名为RestartProcessManager
. 本质上,一个进程 LRU 被维护,如果新终止的服务被配置为这样做(粘滞与否),它会再次被调度。
我面临的问题是如何处理重启。Logcat 表示服务意图正在传递,但由于“进程错误”而失败
在搜索了其他来源后,我被引导相信我的服务中存在内存泄漏。onStartCommand
为了验证这个说法,我创建了一个普通的前台服务,除了在同一个应用程序中记录一个语句之外什么都不做。这也观察到了同样的问题。
在一个新项目中尝试了完全相同的事情(显然有一个新的包名称)并且服务重新启动工作得非常好。另外,我通过单击studio->logcat下的红色十字按钮来模拟重启(这基本上会终止进程)。无论如何,这次服务意图成功传递,服务再次启动并运行。我认为这可能是我的项目中的一些依赖项可能会以某种方式搞砸。我在新项目中复制了依赖项,它继续按预期工作。
现在这就是荒谬的地方。我在错误的项目中更改了包名称,并且不再遇到问题。我已经解决了这个问题,因为我花了将近 2 天的时间来诊断这个问题,但是更改包名称对我来说是不可行的,因为我的应用程序已经发布了。
Edit-1:我必须提到,我目前在运行 Oreo(一加 5)的设备上观察到了这一点
Edit-2: 该服务与应用程序在同一进程中运行。我也包括了 logcat 转储。
android - 删除点击通知(不重复)
请不要在没有完全阅读问题的情况下将其标记为重复,因为那里有许多类似的问题。
我的问题正如标题所说:我使用前台服务来显示静态通知。我想在用户单击通知时删除通知。我知道我的代码中一定遗漏了一些东西:
注释行是我尝试过的行,但没有运气。
android - 前台服务因内存不足而终止
我有一个由 startForeground() 和 onStartCommand reurns START_STICKY 启动的前台服务。我想整天运行它,但是当我玩游戏或通过 Google Play 的“填充 RAM 内存”应用程序手动增加 RAM 使用量时它会停止。(即使它被杀死了,通知仍然显示。)我该如何修复它?
编辑:还是有更好的方法?该服务运行 3 个线程,其中包含带有一些 Internet 调用的无限循环,然后是 20 分钟或 10 分钟(取决于情况)睡眠。也许是一个 AlarmManager 或类似的东西。
编辑 2:我的平板电脑有 Android 4.4 (API 19),所以我不能使用 JobScheduler。我想我会使用 AlarmManager 就可以了。(我在这里找到了 AlarmManagerExample:https ://github.com/rakeshcusat/Code4Reference )
android - 在不同的进程中运行服务有什么好处?
我见过很少有音乐应用程序在后台运行时使用前台服务。除此之外,服务是在单独的进程中启动的吗?
我不明白我们什么时候需要进行这种设计?我们将通过这种方式获得什么优势?
java - 应用程序崩溃但前台服务仍在运行
我正在使用为我的应用程序提供蓝牙功能的前台服务。当应用程序崩溃时,服务仍然被绑定。所以,onServiceDisconnected()
不会被触发。该应用程序已死,但该服务仍在其下运行。
当然,突然的应用程序崩溃并没有给我机会调用 unbind 方法。发生的事情是该服务仍在运行,而忽略了下面的死应用。
是否有人面临同样的问题,或者可能找到了管理事件的解决方法?
服务是否能够在任务列表中搜索自己的应用程序并了解应用程序是否存在?
android - 音乐流,谷歌开发者控制台警告:挂起部分唤醒锁
我已经为 Android 构建了一个在线时钟收音机,它还具有一个集成的音乐播放器,可以作为带有通知的前台服务,并且它有自己的唤醒锁 - 在服务启动时获取并在用户按下“停止”并完成服务时释放.
现在我收到关于在 Google Developer Console 中为这个应用程序挂起部分唤醒锁的警告。收到此警告是绝对正确的,因为如果有人继续听音乐的时间更长,那么唤醒锁(wifi-manager 和 power-manager)也会根据需要保持在屏幕上时保持音乐播放的时间。已关闭。
该应用程序可以完美运行,并且可以在屏幕关闭和/或处于省电模式时播放数小时 - 完全符合预期。
另外: 在开发人员指南和最佳实践中,他们指出:
如果您必须使用部分唤醒锁,请遵循以下建议:
确保您的应用程序的某些部分保留在前台。例如,如果您需要运行服务,请改为启动前台服务。这直观地向用户表明您的应用程序仍在运行。
确保获取和释放唤醒锁的逻辑尽可能简单。当您的唤醒锁逻辑与复杂的状态机、超时、执行程序池和/或回调事件相关联时,该逻辑中的任何细微错误都可能导致唤醒锁的持有时间比预期的要长。这些错误很难诊断和调试。
我想我已经解决了这个问题。
他们在开发控制台中告诉我警告出现的位置:
请记住,对于某些应用程序,需要更长的唤醒锁才能启用音乐流等关键功能。
因此,我相信一切都很好,但是由于仍然显示“不良行为”的警告,我想得到建议。
问题是:
- 我可以做些什么来避免收到此警告吗?
- 我是否必须担心 Google 会因为我的应用程序显示“不良行为”而受到 Google 的“惩罚”,尽管它运行正常?
流媒体服务(部分)代码: