我已经为Android构建了一个在线时钟收音机,它还具有一个集成的音乐播放器作为带有通知的前台服务,它有自己的唤醒锁 - 在服务启动时获取并在用户按下“停止”并完成服务时释放。
现在,我在Google Developer Console中收到有关为此应用挂起部分唤醒锁的警告。接收此警告是完全正确的,因为如果有人长时间听音乐,那么只要需要保持音乐在屏幕上播放的时候,wakelocks(wifi管理员和电源管理器)也会被保留已关闭。
该应用程序完美运行,并在屏幕关闭和/或省电模式下播放数小时 - 完全符合预期。
另外:他们说:In Developer Guidelines and best practices:
如果必须使用部分唤醒锁,请遵循以下建议:
确保您应用的某些部分仍然在前台。例如,如果您需要运行服务,请改为启动前台服务。这可以直观地向用户显示您的应用仍在运行。
确保获取和释放唤醒锁的逻辑尽可能简单。当唤醒锁逻辑与复杂状态机,超时,执行程序池和/或回调事件相关联时,该逻辑中的任何细微错误都可能导致唤醒锁保持的时间超过预期。这些错误很难诊断和调试。
我想我已经照顾好了。
他们告诉我在开发控制台中出现警告:
请注意,对于某些应用,需要更长的唤醒锁才能启用音乐流等关键功能。
由于我认为一切都很好,但由于“不良行为”的警告仍然显示,我想得到建议。
问题是:
流媒体服务(部分)代码:
@Override
public void onCreate() {
...
// WAKE LOCK && WIFI LOCK
powerManager = (PowerManager) getApplicationContext().getSystemService(POWER_SERVICE);
wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakelockTag");
wakeLock.acquire();
wMgr = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
wifiLock = wMgr.createWifiLock(WifiManager.WIFI_MODE_FULL, "MyWifiLock");
wifiLock.acquire();
...
// notification gets built
...
startForeground(ntfctnId, buildNotification(standardNoti));
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// player here...
...
@Override
public void onDestroy() {
...
// RELEASE WAKE LOCK && WIFI LOCK
wakeLock.release();
wifiLock.release();
...
我没有注意到任何负面影响 - 既不是Google,也不是用户,也不是任何其他人或其他人。
一切都很好。如果唤醒锁无法避免 - 音乐应用程序的情况显然也是如此 - 您无需担心在开发者控制台中发现任何相关警告。