Android Pie - 过夜服务一直被杀死

问题描述 投票:2回答:3

我有一个应用程序,一夜之间运行后台服务。它由alarm clock app触发。

该应用程序将夜间从手机的外部SD卡上传数据到Dropbox上。它在以前版本的Android上无缝工作,但不在Pie上工作。每晚运行约两小时后,后台服务被杀死。然而,有趣的是,我注意到如果我对我的代码进行微小的更改,例如编辑一个字符串,然后运行一个调试,该应用程序在第二天晚上完美运行,但随后在接下来的夜晚,两小时后又回到了被杀。

我尝试过以下方法:

  • 使用具有持久通知的前台服务
  • 在应用程序打开后打开和关闭活动,因此它位于最近的应用程序列表中
  • 使应用成为设备管理员
  • 禁用应用的电池优化
  • CPU和Wifi唤醒锁
  • 运行具有无限循环的线程,该循环使用root权限每五秒调整应用程序的minfree值
  • 在夜间禁用Pie的自适应电池管理器功能

尽管所有这些机制,该应用程序仍然被杀死。我的理论是手机上有某种人工智能电池管理器/性能优化器,可以看到应用程序整夜运行并决定将来杀死它,但是当我重新安装应用程序时会重置它。

我已经尝试了一切,但我似乎仍无法找到解决方案。有人可以指点我正确的方向吗?我确定有一些根/反射的东西,我可以做到解决这个问题,但我只是不知道它是什么!

android android-service
3个回答
0
投票

尝试作业调度程序

https://developer.android.com/reference/android/app/job/JobScheduler.html

https://developer.android.com/topic/performance/scheduling.html

使用报警管理器

https://developer.android.com/reference/android/app/AlarmManager.html

作为Android 8.0(API级别26)为改善电池寿命而引入的更改之一,当您的应用进入缓存状态且没有活动组件时,系统会释放应用程序所拥有的任何唤醒锁。

此外,为了提高设备性能,系统会限制未在前台运行的应用程序的某些行为。特别:

现在在后台运行的应用程序对可以自由访问后台服务的速度有限制。应用无法使用其清单来注册大多数隐式广播(即,不是专门针对应用的广播)。默认情况下,这些限制仅适用于以O为目标的应用。但是,即使应用未定位O,用户也可以从“设置”屏幕为任何应用启用这些限制。


0
投票

什么都不会像作业计划或警报管理器那样工作

只有使用WorkManager才能解决您的问题


0
投票

我发现了问题!事实证明我的手机有一个名为G3的服务,它正在杀死应用程序以“节省电力”。显然,这项服务没用,所以我卸载它,问题立即得到解决!

我使用以下命令:

adb shell pm uninstall --user 0 com.evenwell.powersaving.g3
adb shell pm uninstall --user 0 com.evenwell.powersaving.g3.overlay.base.s600ww

非常恼火的是,这项服务杀死了一个具有root权限,管理员权限和权限的应用程序,以避免电池优化 - 我有多明显地想要让应用程序保持活力?

© www.soinside.com 2019 - 2024. All rights reserved.