在开发者控制台 - 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);
}
答案 0 :(得分:4)
我认为,问题在于
mWakeLock.setReferenceCounted(false);
应该是true
,因此系统可以在您释放锁定时进行计数。
在你的情况下,你可能正在释放它,但系统没有“看到”它。
这可能会使生命造成混淆。
尝试将该标志设置为true。 希望这会有所帮助。