问题标签 [android-doze]

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 投票
3 回答
20242 浏览

android - 在高端手机上杀死最小的android前台服务

我正在尝试创建一个允许用户记录路线(位置/GPS)的应用程序。为了确保即使屏幕关闭也能记录位置,我foreground service为位置记录创建了一个。我将位置存储在Room Database使用Dagger2.

但是,该服务被 Android 杀死了,这当然不好。我可以订阅内存不足警告,但这并不能解决我的服务在运行 Android 8.0 的现代高端手机上大约 30 分钟后被杀死的根本问题

我创建了一个只有“Hello world”活动和服务的最小项目:https ://github.com/RandomStuffAndCode/AndroidForegroundService

该服务是在我的Application课堂上启动的,并且路由日志记录是通过以下方式启动的Binder

我可能不需要BIND_AUTO_CREATE标志,我一直在测试不同的标志,试图不让我的服务被杀死——到目前为止还没有运气。

使用分析器,我似乎没有任何内存泄漏,内存使用量稳定在 ~35mb:

剖析器

使用adb shell dumpsys activity processes > tmp.txti 可以确认foregroundServices=true并且我的服务在 LRU 列表中列在第 8 位:

Proc # 3: prcp F/S/FGS trm: 0 31592:com.example.foregroundserviceexample/u0a93 (fg-service)

似乎不可能创建一个您可以信任不会被杀死的前台服务。所以,我们能做些什么?出色地...

  1. 将服务放在一个单独的进程中,试图让 Android 杀死 UI/Activity,同时不理会服务。可能会有所帮助,但似乎不能保证
  2. 将服务中的所有内容保存在例如Room数据库中。每个变量,每个自定义类,每次任何更改,然后使用START_STICKY. 这似乎有点浪费,并且不会导致非常漂亮的代码,但它可能会工作......有点。根据 Android 在杀死服务后重新创建服务所需的时间,很大一部分位置可能会丢失。

这真的是目前在 Android 后台做事的状态吗?没有更好的方法吗?

编辑:将应用程序列入白名单以进行电池优化(禁用它)不会阻止我的服务被杀死

编辑:使用Context.startForegroundService()启动服务并不能改善情况

编辑:所以这确实只发生在某些设备上,但它始终在它们上发生。我想您必须做出选择,要么不支持大量用户,要么编写非常丑陋的代码。惊人的。

0 投票
1 回答
864 浏览

android - 带有处理程序的前台服务的 CPU 使用率

如何确保在应用程序关闭、屏幕锁定和打盹模式处于活动状态时前台服务可以使用 CPU?

有一些处理程序线程,我在前台服务中使用 postdelayed 方法计划任务。我列出了我的测试用例:

  1. 前台服务中的部分唤醒锁:
    处理程序从不延迟。
  2. 没有唤醒锁,设备通过 adb 连接:
    处理程序从不延迟。(打盹模式,后台情况,屏幕锁定都试过了。)
  3. 没有唤醒锁,应用程序在屏幕上:
    处理程序从不延迟。
  4. 没有唤醒锁,后台应用程序,应用程序未销毁:
    处理程序可能会延迟。
  5. 没有唤醒锁、屏幕开启、应用程序被破坏:
    处理程序可能会延迟。
  6. 没有唤醒锁,屏幕锁定:
    处理程序总是在不知不觉中延迟。
  7. 没有唤醒锁,打盹活动:
    处理程序总是在不知不觉中延迟。

文档没有太多关于前台服务 cpu 使用限制的说明。是否存在与前台服务相关的错误?

0 投票
0 回答
142 浏览

android - Android,如何在 idle_maintenance 模式下检测并执行任务?

当设备处于打盹模式时,我需要发送跟踪信息。

根据page monitoring-device-state有idle 和idle_maintenance,我知道当它在idle_maintenance 窗口时,应用程序可以执行任务。在我的情况下,我想获取跟踪信息并发送到我的服务器,但是当有空闲或 idle_maintenance 窗口时,我的应用程序处于阻塞状态。

如何在模式 idle_maintenance 下执行任务?

或者

我可以使用什么库?

或者

有什么例子吗?

首先,谢谢。

0 投票
0 回答
234 浏览

android - 如何在设备移动时覆盖打盹模式?

我正在编写一个应用程序,即使应用程序关闭,它也需要以特定时间间隔轮询位置。我目前正在使用 Firebase JobDispatcher 来完成工作。代码如下:

我的要求如下:

1)如果手机正在充电,则需要不断轮询位置(正在发生)

2)如果手机静止在同一位置,则应用不得轮询(当应用进入打盹模式时也会发生这种情况)

3)如果手机在行驶的汽车中保持静止(或者如果手机在骑自行车时保持静止在某人的口袋中),则需要连续轮询该位置(这没有发生,这是问题)。

当电话放在行驶的汽车内时,如何让工作调度员进行轮询?

0 投票
1 回答
3559 浏览

android - 即使从“未优化的应用程序”中删除 PowerManager.isIgnoringBatteryOptimizations 也始终返回 true

我有一个里程日志应用程序,它可以进行 GPS 跟踪,并且能够在后台建立与汽车的 OBDII 连接。

现在我想显示一个弹出窗口,通知用户如果我的应用程序没有被列入白名单,因为这可能会停止我的后台(实际上是前台)服务......

我愿意:

但 PowerManager.isIgnoringBatteryOptimizations 始终返回“true”,即使它再次从“未优化的应用程序”中删除。仅当我卸载应用程序'false' 再次返回...在 Galaxy Note 8 (Android 8.0) 和 Emulator 8.1 上测试

问题很简单:这是一个错误吗?或者如何从白名单中删除应用程序,以便 PowerManager.isIgnoringBatteryOptimizations 再次返回“假”?

0 投票
1 回答
605 浏览

android - 即使在打瞌睡模式下也每 15 秒获取一次位置

我想每 15 秒获取一次位置,一切正常,但是在打瞌睡模式(深度睡眠)下,我的处理程序无法正常工作,是吗?AlarmManager 是个好方法,但时间限制为 1 分钟,在打盹模式下不重复。

接收者 :

0 投票
1 回答
375 浏览

android - 从 FCM 启动活动

在我的应用程序中,当收到高优先级 FCM 消息时,我需要启动一个活动并打开屏幕。这是一个警报活动,对用户来说非常非常重要。在大多数 Android 设备上,代码运行良好。但是,在某些华为或 LG 设备上,当设备处于打盹模式或放在口袋中(接近传感器)时,活动不会启动。行为应该类似于闹钟、电话等。这是我的代码:

FirebaseMessagingService:

报警活动:

我想在启动活动之前使用SCREEN_BRIGHT_WAKE_LOCK,但它已被弃用。

0 投票
1 回答
950 浏览

android - 在打盹模式下在前台服务中重复任务

我正在开发一个应用程序,在该应用程序中,我必须以固定的时间间隔(比如说 2 分钟后)执行一些重复任务,即使在打瞌睡模式下也应该完成。我的观察在下面提到 -

  1. 使用警报(使用 RTC 标志)执行重复任务是不准确的。Android系统批量报警。如果我们使用 RTC_WAKEUP 那么它比 RTC 更好,但它在 Android Vitals 中显示 WAKEUP 计数不好。
  2. Jobscheduler 很有用,但不会在 2 分钟等更短的时间间隔内工作。我曾尝试过 Firebase Jobdispatcher,但这也不是很准确,我以 2 分钟的触发时间开始了 Job,但它在 10-20 分钟之间变化。
  3. 使用处理程序和计时器在前台服务中重复任务。在这种情况下,前台服务继续以打盹模式运行,但处理程序和计时器停止重复任务。我阅读了 Handlers.postDelayed() 并发现这也受打盹模式的影响。

我不想为这个重复任务获取 WAKELOCK。

有人可以建议我一些更好/更干净的方法,我们可以在打瞌睡模式下做短间隔重复任务吗?

以供参考 -

Android:准备好重复的后台任务 Android Oreo 的最佳方法是什么?

打盹模式如何影响后台/前台服务,有/没有部分/全部唤醒锁?

0 投票
0 回答
201 浏览

mqtt - 打盹模式与 MQTT 连接丢失

当Android设备进入Doze模式时,MQTT中会触发connectionlost回调

到目前为止我已经尝试了什么?

1.Written广播接收器检测应用程序是否进入打盹模式。

2.一旦进入,做部分唤醒锁定。

我的问题是?

有什么方法可以让我的应用程序始终连接到互联网,以确保我的应用程序用户不会错过任何通知。

0 投票
2 回答
1604 浏览

android - Oreo 无限后台服务,例如 Messenger 或 Instagram

如何创建infinite background service无通知,如 Messenger、Instagram 或 HID Mobile Access?

例如,HID Mobile Access 具有无限运行的后台服务,不会被系统杀死,没有通知,并且在从最近的应用程序列表中删除应用程序时不会重新启动。

有什么技巧可以做到这一点,或者谷歌是否有非官方支持的应用程序?