意图:没有服务直接绑定活动到BroadcastReceiver?

时间:2016-09-08 17:32:44

标签: android android-intent broadcastreceiver

首先,我想在这里给出代码,但代码很长,可以在这里找到

http://www.c-sharpcorner.com/article/creating-and-scheduling-alarms-in-android/

文章中的代码不会创建服务。

根据我的理解, BroadcastReceiver 用于根据相应的服务(通过意图)提供活动。

通常我们会声明:

Intent serviceIntent = new Intent(MainActivity.this, CustomeService.class);
   startService(serviceIntent);
   registerReceiver(mReceiver, mIntentFilter);

其中 mReceiver 类似于:

private BroadcastReceiver mReceiver = new BroadcastReceiver() {

      @Override
      public void onReceive(Context context, Intent intent) {

       }
}

但是在我通过链接分享的示例中的AlarmManager类中有些让我困惑的事情:

intent = new Intent(this, MyBroadcastReceiver.class);  
            pendingIntent = PendingIntent.getBroadcast(  
                    this.getApplicationContext(), 280192, intent, PendingIntent.FLAG_CANCEL_CURRENT);  
            alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);  
            alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, Calendar.getInstance().getTimeInMillis() + (i * 1000), 10000  
                    , pendingIntent);  

让我感到困惑的是:

intent = new Intent(this, MyBroadcastReceiver.class);

MyBroadcastReceiver.class的类型是 BroadcastReceiver 本身,而不是 Service.

那么 MyBroadcastReceiver.class 从那时开始接收广播的服务在哪里?

BroadcastReceiver 以某种方式创建自己的服务吗?

1 个答案:

答案 0 :(得分:1)

  

此MyBroadcastReceiver.class的类型是BroadcastReceiver本身,而不是Service

正确。它与PendingIntent. getBroadcast(), not getService()`一起使用。

  

那么MyBroadcastReceiver.class从那时收到的服务在哪里播出?

某些Service发送的广播很少,但这肯定是可能的。在这种情况下,当警报时间到来时,广播将从系统进程发送,作为发送PendingIntent的一部分。

  

BroadcastReceiver会以某种方式创建自己的服务吗?

我不确定你的意思"创造"这里。 BroadcastReceiver可以将其工作委托给Service。这是AlarmManager的常见模式:让警报触发WakefulBroadcastReceiver,然后将工作委托给IntentService。在这种情况下,间接的原因源于AlarmManagerWakeLocks一起使用的方式。