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

问题描述 投票:0回答:1

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

现在,我在Google Developer Console中收到有关为此应用挂起部分唤醒锁的警告。接收此警告是完全正确的,因为如果有人长时间听音乐,那么只要需要保持音乐在屏幕上播放的时候,wakelocks(wifi管理员和电源管理器)也会被保留已关闭。

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

另外:他们说:In Developer Guidelines and best practices

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

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

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

我想我已经照顾好了。

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

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

由于我认为一切都很好,但由于“不良行为”的警告仍然显示,我想得到建议。

问题是:

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

            ...
android streaming wakelock foreground-service
1个回答
0
投票

我没有注意到任何负面影响 - 既不是Google,也不是用户,也不是任何其他人或其他人。

一切都很好。如果唤醒锁无法避免 - 音乐应用程序的情况显然也是如此 - 您无需担心在开发者控制台中发现任何相关警告。

© www.soinside.com 2019 - 2024. All rights reserved.