【问题标题】:Doze mode is making critical to my app打盹模式对我的应用至关重要
【发布时间】:2017-09-06 07:25:25
【问题描述】:

我认为这个问题在 stackoverflow 中被问了很多次,但仍然有很多人在努力解决它。

在我的 android 应用程序中,我必须每 30 分钟唤醒一次设备以获取当前位置并将其发送到服务器。为此,我使用了具有 setExactAndAllowWhileIdle() 方法和 WakefulBroadcastReceiver 的 AlarmManager。它在几乎所有标准/流行设备中都可以正常工作,但其他一些设备主要是中国设备不支持或不允许使用 setExactAndAllowWhileIdle() 从打盹模式唤醒设备。我已经在 Moto G4 plus(Android OS 6.1) 设备上测试过它不允许闹钟管理器在特定的时间间隔唤醒。

我正在使用AlarmManager 调用wakefulBroadcastReceiver,它会触发wakefulIntentservice 来执行后台任务。但它严重耗尽电池并且处于打盹模式(牛轧糖),它不执行后台任务。除此之外,它从后端服务捕获数据。

my code is here->>

        // Setup periodic alarm every 30 minutes
        if (android.os.Build.VERSION.SDK_INT >= 23) {
            syncDbAlarmManager.setAndAllowWhileIdle(AlarmManager.ELAPSED_REALTIME_WAKEUP,
                    intervalMillis, pIntent);
        } else if (android.os.Build.VERSION.SDK_INT >= 19
                && android.os.Build.VERSION.SDK_INT < 23){
            syncDbAlarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, triggerAtMillis/*firstMillis*/,
                    intervalMillis, pIntent);
        } else {
            syncDbAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, triggerAtMillis/*firstMillis*/,
                    intervalMillis, pIntent);
        }

我也用过PowerManager-->

PowerManager powerManager = (PowerManager) context.getSystemService(POWER_SERVICE);
PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
        "com.example.johnbravado");
wakeLock.acquire();
// Do Work
MyConstants.getInstance().msgReqAction(intent.getIntExtra(MyConstants.BROADCAST_DATA_REQ, 0));

wakeLock.release();

【问题讨论】:

    标签: android android-doze


    【解决方案1】:

    恐怕我只有部分答案。

    根据我的经验,您不应该释放唤醒锁。我注意到如果您停止唤醒锁,摩托罗拉是如何唤醒的。这是不幸的,因为它使用更多的电池。如果你在三星手机上这样做,你的电池使用量会变得非常高。所以我建议你插入一个条件,如果品牌是摩托罗拉(和其他),你不要释放唤醒锁。 我很欣赏这是一个 hack,但它对我有用。

    【讨论】:

    • 但是它消耗太多电池,甚至在进入睡眠(打盹)模式后无法工作。 @FabioC
    • 不,我不会释放唤醒锁。默认情况下,进入睡眠模式后根本不会触发服务。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-16
    • 2017-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多