我目前正在开发一个应用程序,它使用GCM向许多设备发送通知,这些设备启动服务以开始轮询RabbitMQ消息队列并对收到的每条消息进行一些处理。我正在使用WakefulBroadcastReceiver来保持设备在服务启动后保持唤醒状态,但是如果设备屏幕关闭而不是我保持打开状态,我会看到显着的性能损失。我还取消选中了“Wi-Fi优化”选项,并确保“在睡眠期间保持Wi-Fi开启”设置为“始终”。
我还缺少其他东西吗?该服务不会完全停止,只要屏幕熄灭,它就会变慢。我是否按下待机按钮或在设定的时间后让它关闭。这些设备混合使用Jelly Bean(4.2.2)和Kit Kat(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);
}