Падение производительности устройства Android при выключенном дисплее

#android #performance #wakelock

#Android #Производительность #блокировка пробуждения

Вопрос:

В настоящее время я разрабатываю приложение, которое использует GCM для отправки уведомления нескольким устройствам, которое запускает службу для начала опроса очереди сообщений RabbitMQ и выполняет некоторую обработку каждого полученного сообщения. Я использую WakefulBroadcastReceiver, чтобы поддерживать устройство в состоянии бодрствования после запуска службы, но я вижу значительное снижение производительности, если экраны устройств выключены, а не если я оставляю их включенными. Я также снял флажок с параметра «Оптимизация Wi-Fi» и убедился, что для параметра «Всегда поддерживать Wi-Fi включенным во время сна».

Есть ли что-то еще, чего мне не хватает? Служба не останавливается полностью, она просто замедляется всякий раз, когда экран гаснет. Нажимаю ли я кнопку ожидания или отключаю ее по истечении установленного времени. Устройства работают под управлением Jelly Bean (4.2.2) и Kit Kat (4.4.2)

Заранее спасибо!

Добавлены фрагменты кода ниже. Упомянутый рабочий класс просто вызывает другой класс, который выполняет некоторую обработку данных:

 public class GcmBroadcastReceiver extends WakefulBroadcastReceiver 
{
    @Override
    public void onReceive(Context context, Intent intent) 
    {
        // Explicitly specify that GcmIntentService will handle the intent.
        ComponentName comp = new ComponentName(context.getPackageName(), GcmIntentServicece.class.getName());

        // Start the service, keeping the device awake while it is launching.
        startWakefulService(context, (intent.setComponent(comp)));
        setResultCode(Activity.RESULT_OK);
    }
}
  

Метод ‘onHandleIntent’ службы намерений

 @Override
protected void onHandleIntent(Intent intent) 
{
    Bundle extras = intent.getExtras();
    GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this);

    String messageType = gcm.getMessageType(intent);

    if (!extras.isEmpty())
    {  
         if (GoogleCloudMessaging.MESSAGE_TYPE_MESSAGE.equals(messageType)) 
         {
            String message = extras.getString("message");

            if (message.equals(START_PROCESSING))
            {                 
                Worker worker = new Worker(this, queueServerUrl, Integer.parseInt(queueServerPort), queueName, fileServerUrl);
                Map<String, Integer> results = worker.StartWorking();

                // Update the results
                update(results, jobId);
            }
        }
    }

    // Release the wake lock provided by the WakefulBroadcastReceiver.
    GcmBroadcastReceiver.completeWakefulIntent(intent);
}
  

Комментарии:

1. Что делают службы? Можете ли вы поделиться кодом?

2. Я предполагаю, что устройства делают это специально для экономии заряда батареи. Высокая вычислительная мощность обычно не требуется, когда экран выключен.

3. Служба просто вызывает рабочий класс, который выполняет некоторую обработку данных в текстовых файлах. Я добавил код, который создает и освобождает блокировку