我在应用程序上工作,它将通过GCM收到大量消息。
我创建了广播接收器,卡拉斯这样的意图
public class GcmBroadcastReceiver extends WakefulBroadcastReceiver {
public void onReceive(Context context, Intent intent) {
ComponentName comp = new ComponentName(context.getPackageName(), MyIntentService.class.getName());
startWakefulService(context, (intent.setComponent(comp)));
setResultCode(Activity.RESULT_OK);
}
}
然后MyIntentService将调用处理程序将消息保存在DB中。
一切都运转正常,我的问题是这样,可以做上面显示的内容吗?我在Android 2个月大,但上面看起来它会在每次有新消息时创建服务,例如,如果同时收到20条GCM消息则表示20条服务将开始工作。 我的解释是否正确?如果是的话我该怎么办?
答案 0 :(得分:0)
事实并非如此,只会启动一项服务。 正如文档所述,startWakefulService()执行context.startService(),其中声明:
如果此服务尚未运行,它将被实例化并启动(如果需要,为其创建一个进程);如果它正在运行,那么它仍然在运行。
所以基本上只有在服务尚不存在的情况下才会创建服务。文档还声明新的意图将被传递给调用其onStartCommand()的现有服务。
所以是的,你应该按照自己的方式做到这一点,只使用一种服务!
文档:
答案 1 :(得分:0)
如果您的MyIntentService正在扩展IntentService,那么您应该做的就是使用以下内容释放所持有的唤醒锁:
@Override
protected void onHandleIntent(Intent intent) {
Bundle extras = intent.getExtras();
// ADD YOUR GCM TO THE DB HERE, THEN RELEASE THE WAKE LOCK
GcmBroadcastReceiver.completeWakefulIntent(intent);
来自文档:
"服务根据需要启动,使用工作线程依次处理每个Intent,并在失去工作时自行停止"
因此,从我可以收集的信息中,将GCM消息放入数据库后,服务将自行停止。
可以找到文档here