我已经为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();
...
答案 0 :(得分:0)
我没有发现任何负面消息-既不是来自Google,也不来自用户,也没有任何东西或其他任何人。
一切都很好。如果无法避免唤醒锁(音乐应用程序显然就是这种情况),那么您无需担心在开发人员控制台中有与此相关的任何警告。