-1

我在这里阅读了有关如何接收 GCM 消息的信息:http: //developer.android.com/google/gcm/client.html - 我说的是标题:接收下游消息。有一个说明:使用 WakefulBroadcastReceiver 不是必需的。如果您有一个不需要服务的相对简单的应用程序,您可以在常规 BroadcastReceiver 中拦截 GCM 消息并在那里进行处理。一旦你得到 GCM 传递给你的广播接收器的 onReceive() 方法的意图,你如何处理它取决于你。

当收到 GCM 消息时,我只想从中提取标题并将其放在通知区域中,这样当用户单击它时,它将打开带有特定片段的我的应用程序。当然,当该消息到达时,设备可能处于睡眠状态。

广播接收器示例是这样的:

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(),
                GcmIntentService.class.getName());
        // Start the service, keeping the device awake while it is launching.
        startWakefulService(context, (intent.setComponent(comp)));
        setResultCode(Activity.RESULT_OK);
    }
}

所以这里有几个问题:

1)唤醒广播接收器仅仅是为了防止设备进入睡眠状态,或者在消息到达时唤醒它?

2) 我怎么知道我需要一个普通的广播接收器还是一个唤醒的接收器?

3) 假设我有多个广播接收器,应用程序如何知道消息到达时使用哪个接收器?

4)如果我只想提取标题并将其放在通知区域中,而不是调用使用广播接收器意图的意图服务,我应该只处理广播接收器本身内部的意图吗?

4

1 回答 1

0

1)唤醒广播接收器仅仅是为了防止设备进入睡眠状态,或者在消息到达时唤醒它?

只是为了防止设备进入睡眠状态。

2) 我怎么知道我需要一个普通的广播接收器还是一个唤醒的接收器?

如果你要做太多的工作,你需要使用intentService,因为接收器是在 UI 线程上调用的,如果你想让你的 CPU 在工作时保持活跃,请使用唤醒。一般来说,当您在这种情况下从广播接收器调用服务时,不能保证您的 CPU 不会再次进入睡眠状态,因此请始终使用wakeful.

3) 假设我有多个广播接收器,应用程序如何知道消息到达时使用哪个接收器?

从清单中接收者的意图过滤器:

    <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        <category android:name="com.example" />
    </intent-filter>

4)如果我只想提取标题并将其放在通知区域中,而不是调用使用广播接收器意图的意图服务,我应该只处理广播接收器本身内部的意图吗?

是的,你可以做到,因为它不需要太多时间。并且保证CPU在执行onRecive方法时不会进入睡眠状态broadCastReciever.

于 2015-03-04T10:12:00.073 回答