意图:在没有服务的情况下直接绑定 Activity 到 BroadcastReceiver?

Intent : Direct binding Activity to BroadcastReceiver without service?

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

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

文章中的代码没有创建服务。

根据我的理解,BroadcastReceiver 用于根据相应的 Service 服务 activity (通过意图)。

通常我们会这样声明:

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) {

       }
}

但是在我由 link 分享的示例中,AlarmManager class 中有些东西让我感到困惑:

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 是否以某种方式创建了自己的服务?

the type of this MyBroadcastReceiver.class is BroadcastReceiver itself, and not Service

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

So where's the Service that this MyBroadcastReceiver.class received broadcast from then?

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

Does BroadcastReceiver somehow create its own service?

我不明白你说的 "create" 是什么意思。 BroadcastReceiver 可以将其工作委托给 Service。这是 AlarmManager 的常见模式:让警报触发 WakefulBroadcastReceiver,然后将工作委托给 IntentService。在那种情况下,间接的原因源于 AlarmManagerWakeLocks.

的工作方式