Android vitals - Stuck Wake Locks和前台服务

时间:2017-09-14 09:59:56

标签: android google-play-console

在开发者控制台 - Android vitals中,我看到警告该应用已经"卡住部分唤醒锁定"。 在documentation中,它被描述为

  

如果应用程序在后台运行时,部分唤醒锁定会被卡住(用户无法看到您的应用程序的任何部分)。

应用程序在后台运行(播放音频)确实如此,但是当app保持锁定通知可见时,我使用前台服务和整个时间。

稍后在documentation,您可以阅读

  

确保您应用的某些部分仍然在前台。例如,如果您需要运行服务,请改为启动前台服务。这可以直观地向用户显示您的应用仍在运行。

但它似乎并非如此。 Android vitals是否忽略该app具有前台服务?有没有人有类似的经历?

编辑:这是我的AudioService的代码

PowerManager.WakeLock mWakeLock = null;
boolean mHasWakeLock;

void acquireLocks(){

    if (!mHasWakeLock) {
        final PowerManager pm = (PowerManager) 
        context.getSystemService(Context.POWER_SERVICE);
        mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,TAG);
        mWakeLock.setReferenceCounted(false);
        mWakeLock.acquire();
        mHasWakeLock = true;
    }
}

void releaseLocks() {
    if (mWakeLock != null) {
        mWakeLock.release();
        mWakeLock = null;
    }
    mHasWakeLock = false;
}

void play(){
    startForeground(NOTIFICATION_ID, notification);
    acquireLocks();
}

void stop(){
    releaseLocks();
    stopForeground(true);
}

1 个答案:

答案 0 :(得分:4)

我认为,问题在于

mWakeLock.setReferenceCounted(false);

应该是true,因此系统可以在您释放锁定时进行计数。 在你的情况下,你可能正在释放它,但系统没有“看到”它。 这可能会使生命造成混淆。

尝试将该标志设置为true。 希望这会有所帮助。