当前位置:  开发笔记 > 运维 > 正文

即使使用dontkillmyapp.com的解决方案,华为设备也会杀死我的前台服务

如何解决《即使使用dontkillmyapp.com的解决方案,华为设备也会杀死我的前台服务》经验,为你挑选了0个好方法。

我正在开发一个基本上是位置跟踪软件的应用程序。启动时,它会保存位置并将其发送到服务器。

该代码已经运行了5年,没有任何修改,没有任何错误。

它通过简单的前台服务实现。

最近几个月,我收到用户报告的关于该服务的错误,错误在华为设备上随机停止。首先,我认为这是较新的android上罕见的/新的崩溃,但是Fabric中根本没有错误日志。

我在新的华为设备上进行了尝试,令我惊讶的是,这种现象确实存在。几分钟后,具有EMUI的华为设备确实终止了前台服务。

这对我的应用程序真的很不好,首先,用户希望长时间运行此跟踪应用程序,其次,最近几个月,华为已成为Android用户中的热门选择。大概有10%的用户拥有华为设备。

我知道https://dontkillmyapp.com/这是一个获取有关此问题信息的好网站。

尝试过他们的解决方案,该解决方案基本上是在我的服务中添加带有特定标签的唤醒锁,因此华为的EMUI不会杀死它。

我已经按照以下方式尝试过此方法,几分钟后我的华为测试设备仍然无法使用我的前台服务

服务中的代码:

我基本上在服务的onCreate回调中获取了唤醒锁。

 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();
}

编辑:

澄清:我的服务是前台服务,带有持久通知。它可以在其他设备上正常运行DAYS。

如果可以的话请帮忙,

亚当

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有