意图:在没有服务的情况下直接绑定 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(), not
getService()` 一起使用。
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
。在那种情况下,间接的原因源于 AlarmManager
与 WakeLocks
.
的工作方式
首先我想在这里给出代码,但是代码太长了,可以在这里找到
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(), not
getService()` 一起使用。
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
。在那种情况下,间接的原因源于 AlarmManager
与 WakeLocks
.