我正在开发一个应用程序,它 基本上是一个位置跟踪软件 。当你启动它时, 它会保存位置并将它们发送到服务器上。
这个代码 已经工作了5年,没有任何修改,也没有任何错误。
它是通过一个 简单的前台服务 实现的 。
最近几个月,我收到用户报告的错误,说 华为设备上的服务随机停止。 首先,我认为这是某种罕见的/新的崩溃在较新的安卓设备上,但 在Fabric中根本没有错误记录。
我在一个新的华为设备上试了一下,让我最惊讶的是,这种现象确实存在。 华为设备(使用EMUI)确实在几分钟后杀死了前台服务。
这对我的应用程序来说真的非常糟糕,首先,用户希望长时间运行这个跟踪应用程序,其次,近几个月来,华为成为安卓用户的热门选择。我的用户群中有10%拥有华为设备。
我知道 https://dontkillmyapp.com/ ,这是一个获得关于这个问题的信息的伟大网站。
我已经 尝试了他们的解决方案--这基本上是在我的服务中添加一个带有特定标签的wakelock, 所以华为的EMUI不会杀死它。
我已经尝试了以下方式, 但我的华为测试设备 在几分钟后 仍然杀死了我的前台服务 。
我的服务里面的代码。
我基本上在服务的onCreate回调中获得了一个wakelock。
private void acquireLock() {
if (wakeLock == null) {
PowerManager mgr = (PowerManager) getSystemService(Context.POWER_SERVICE);
if (mgr != null) {
if (Build.MANUFACTURER.toLowerCase().equals("huawei")) {
lockTag = "LocationManagerService";
wakeLock = mgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, lockTag);
Log.i("MY_TAG", "tag:" + lockTag);
if (wakeLock != null && !wakeLock.isHeld()) {
wakeLock.acquire();
//also tried with: wakeLock.acquire(1000*60*60*72); 3 days wakelock just in case.
Log.i("MY_TAG", "wakeLock acquired!");
@Override
public void onCreate() {
acquireLock();
E D I T。
Clraification:我的服务是一个前台服务,有一个持续的通知。
它可以在其他设备上良好运行数日。
如果可以的话,请帮忙。