在我的应用程序中,我使用 GCM 和推送通知。但是,我有点担心广播接收器。在应用程序中,我看到广播接收器被声明为 2 种类型。
通过清单静态
<receiver android:name="com.google.android.gcm.GCMBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND" > <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> <category android:name="com.myapp" /> </intent-filter> </receiver> <uses-permission android:name="android.permission.WAKE_LOCK" />
程序化内部活动
private final BroadcastReceiver mHandleMessageReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String newMessage = intent.getExtras().getString(EXTRA_MESSAGE); WakeLocker.acquire(getApplicationContext()); Toast.makeText(getApplicationContext(), "New Message: " + newMessage, Toast.LENGTH_LONG).show(); WakeLocker.release(); } };
我的问题如下:
问题1:我们可以删除广播接收器的程序声明并仍然获得完全有效的通知吗?如果是,是因为我们已经在清单中有它的原因吗?
问题 2:如果接收器被声明为静态和程序化的,那么在什么时候调用哪一个?哪个优先?如果应用程序已打开并运行程序化应用程序被调用?如果应用程序没有运行,静态的?