首先,我想在这里给出代码,但代码很长,可以在这里找到
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 以某种方式创建自己的服务吗?
答案 0 :(得分:1)
此MyBroadcastReceiver.class的类型是BroadcastReceiver本身,而不是Service
正确。它与PendingIntent.
getBroadcast(), not
getService()`一起使用。
那么MyBroadcastReceiver.class从那时收到的服务在哪里播出?
某些Service
发送的广播很少,但这肯定是可能的。在这种情况下,当警报时间到来时,广播将从系统进程发送,作为发送PendingIntent
的一部分。
BroadcastReceiver会以某种方式创建自己的服务吗?
我不确定你的意思"创造"这里。 BroadcastReceiver
可以将其工作委托给Service
。这是AlarmManager
的常见模式:让警报触发WakefulBroadcastReceiver
,然后将工作委托给IntentService
。在这种情况下,间接的原因源于AlarmManager
与WakeLocks
一起使用的方式。