Android vitals - Stuck Wake Locks和前台服务

van*_*dzi 9 android google-play-console

在开发者控制台 - Android vitals中,我看到警告该应用程序有"Stuck partial wake locks".在文档中,它被描述为

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

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

稍后您可以阅读文档

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

但它似乎不是真的.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);
}
Run Code Online (Sandbox Code Playgroud)

Gri*_*ram 4

我认为,问题在于

mWakeLock.setReferenceCounted(false);
Run Code Online (Sandbox Code Playgroud)

应该是true,这样当您释放锁时系统可以计数。就您而言,您很可能会释放它,但系统不会“看到”它。这可能会混淆生命体征。

尝试将该标志设置为 true。希望这可以帮助。