音乐流,谷歌开发者控制台警告:挂起部分唤醒锁



我为Android构建了一个在线时钟收音机,它还具有集成的音乐播放器,可用作带有通知的前台服务,并且它有自己的唤醒锁 - 在服务启动时获取,并在用户按下"停止"并完成服务时释放。

现在,我收到有关在Google开发人员控制台中为此应用程序挂起部分唤醒锁的警告。收到此警告是绝对正确的,因为如果有人继续听音乐较长时间,那么唤醒锁(wifi管理器和电源管理器)也将根据需要保持保持音乐播放屏幕关闭。

该应用程序运行完美,并在屏幕关闭和/或省电模式下播放数小时 - 完全符合预期。

也: 在开发人员指南和最佳做法中,他们指出:

如果必须使用部分唤醒锁,请遵循以下建议:

确保应用的某些部分保留在前台。为 示例,如果需要运行服务,请启动前台服务 相反。这直观地向用户指示你的应用仍在 运行。

确保获取和释放唤醒锁的逻辑尽可能简单。当唤醒锁定逻辑绑定到复杂状态时 计算机、超时、执行程序池和/或回调事件,任何细微的 该逻辑中的错误可能导致唤醒锁的保持时间超过 预期。这些错误很难诊断和调试。

我想我已经处理好了。

他们在出现警告的开发控制台中告诉我:

请记住,对于某些应用,需要更长的唤醒锁才能启用音乐流等关键功能。

因此,我相信一切都很好,但由于仍然显示"不良行为"的警告,我想得到建议。

问题是:

  1. 我可以采取任何措施来避免收到此警告吗?
  2. 我是否必须担心谷歌的"惩罚",因为我的应用程序显示"不良行为",尽管它运行正常?

流服务(部分)代码:

@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();

...

我没有注意到任何负面的东西——无论是来自谷歌,还是用户,也不是任何东西或其他任何人。

一切都很好。如果无法避免唤醒锁(音乐应用显然就是这种情况),则无需担心开发者控制台中有关此问题的任何相关警告。

最新更新