Потоковая передача музыки, предупреждение консоли разработчика Google: зависание частичного пробуждения

Я создал онлайн-радио с часами для Android, в котором также есть встроенный музыкальный проигрыватель, работающий как служба переднего плана с уведомлением, и у него есть собственные пробуждающие блокировки, которые активируются при запуске службы и отключаются, когда пользователь нажимает кнопку «Стоп» и завершает службу.

Теперь я получаю предупреждение о зависании частичной блокировки для этого приложения в консоли разработчика Google. Получение этого предупреждения абсолютно правильно, потому что если кто-то продолжает слушать музыку в течение более длительного периода времени, то и вейклоки (wifi-manager и power-manager) будут удерживаться столько времени, сколько необходимо, чтобы музыка продолжала играть, когда экран выключен.

Приложение отлично работает и часами воспроизводится при выключенном экране и/или в режиме энергосбережения — именно так, как задумано.

Также: в Руководстве для разработчиков и рекомендациях говорится:

Если вы должны использовать частичные блокировки пробуждения, следуйте этим рекомендациям:

Убедитесь, что какая-то часть вашего приложения остается на переднем плане. Например, если вам нужно запустить службу, вместо этого запустите службу переднего плана. Это визуально указывает пользователю, что ваше приложение все еще работает.

Убедитесь, что логика получения и снятия блокировок слежения максимально проста. Когда ваша логика блокировки пробуждения привязана к сложным конечным машинам, тайм-аутам, пулам исполнителей и/или событиям обратного вызова, любая незаметная ошибка в этой логике может привести к тому, что блокировка пробуждения будет удерживаться дольше, чем ожидалось. Эти ошибки трудно диагностировать и устранять.

Думаю, я позаботился об этом.

Они говорят мне в консоли разработчика, где появляется предупреждение:

Имейте в виду, что для некоторых приложений требуются более длительные пробуждения для включения ключевых функций, таких как потоковая передача музыки.

В связи с этим я считаю, что все в порядке, но поскольку предупреждение о плохом поведении все еще отображается, я хотел бы получить совет.

Вопросы:

  1. Могу ли я сделать что-нибудь, чтобы не получать это предупреждение?
  2. Должен ли я опасаться наказания со стороны Google за плохое поведение моего приложения, хотя оно работает правильно?

Код службы потоковой передачи (частичный):

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

person Ben    schedule 07.03.2018    source источник


Ответы (1)


Ничего негативного я не заметил - ни от гугла, ни от пользователей, ни от кого-либо еще.

Все в порядке. Если избежать пробуждения невозможно — а это явно относится к музыкальным приложениям — вам не нужно бояться каких-либо предупреждений об этом в консоли разработчика.

person Ben    schedule 28.02.2019