显示器关闭时Android设备性能下降

显示器关闭时Android设备性能下降,android,performance,wakelock,Android,Performance,Wakelock,我目前正在开发一个应用程序,它使用GCM向许多设备发送通知,这些设备启动服务,开始轮询RabbitMQ消息队列,并对收到的每条消息进行处理。我正在使用WakefulBroadcastReceiver在服务启动后保持设备处于唤醒状态,但如果设备屏幕关闭,而不是保持屏幕打开,我会看到显著的性能下降。我还检查了“Wi-Fi优化”选项,并确保“睡眠期间保持Wi-Fi打开”设置为“始终” 我还缺什么吗?这项服务并没有完全停止,只要屏幕一关闭,它就会减速。无论我是按下待机按钮还是在设定时间后让它熄灭。这些设

我目前正在开发一个应用程序,它使用GCM向许多设备发送通知,这些设备启动服务,开始轮询RabbitMQ消息队列,并对收到的每条消息进行处理。我正在使用WakefulBroadcastReceiver在服务启动后保持设备处于唤醒状态,但如果设备屏幕关闭,而不是保持屏幕打开,我会看到显著的性能下降。我还检查了“Wi-Fi优化”选项,并确保“睡眠期间保持Wi-Fi打开”设置为“始终”

我还缺什么吗?这项服务并没有完全停止,只要屏幕一关闭,它就会减速。无论我是按下待机按钮还是在设定时间后让它熄灭。这些设备运行的是果冻豆(4.2.2)和KitKat(4.4.2)的混合

提前谢谢

下面添加了代码片段。提到的Worker类只调用另一个执行某些数据处理的类:

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);
}
@覆盖
受保护的手部内容无效(意图)
{
Bundle extras=intent.getExtras();
GoogleCloudMessaging gcm=GoogleCloudMessaging.getInstance(this);
字符串messageType=gcm.getMessageType(intent);
如果(!extras.isEmpty())
{  
if(GoogleCloudMessaging.MESSAGE\u TYPE\u MESSAGE.equals(messageType))
{
字符串消息=extras.getString(“消息”);
if(message.equals(开始处理))
{                 
Worker-Worker=new-Worker(这个,queueServerUrl,Integer.parseInt(queueServerPort),queueName,fileServerUrl);
映射结果=worker.StartWorking();
//更新结果
更新(结果、作业ID);
}
}
}
//释放唤醒接收器提供的唤醒锁。
GcmBroadcastReceiver.completeWakefulIntent(intent);
}

这些服务在做什么?你能分享代码吗?我猜这些设备这样做是为了节省电池。当屏幕关闭时,通常不需要高计算能力。该服务只调用对文本文件执行某些数据处理的工人类。我已经添加了创建和释放WakeLock的代码