0

我正在关注这个基本教程: http: //karanbalkar.com/2013/07/tutorial-41-using-alarmmanager-and-broadcastreceiver-in-android/

如您所见,它基本上执行以下操作(如果我错了,请纠正我):

  • 启动 MainActivity 后,为特定日期和时间设置警报。
  • 一旦达到这个日期和时间,它就会开始一个意图MyReceiver.class

第一站。:MyReceiver正在扩展BroadcastReceiver。是否可以启动正常活动的意图?

  • BroadcastReceiver 只是触发一个新的 Intent 来打开一个 Service,它只是显示一个 Notification。

第二站。: 和之前一样:BroadcastReceiver,只能启动属于Services的Intents吗?或者它可以启动正常活动吗?为什么我什至必须调用任何新意图?为什么我不能在 BroadcastReceiver 中完成工作(比如通过互联网下载一些内容)?

我对服务有点陌生,所以如果我说了一些非常奇怪的话,我很抱歉。

太感谢了。

4

3 回答 3

1

BroadcastReceiver只是在收到广播后做任何你想做的事情的一种手段。

ServiceActivity. _ Service虽然没有 GUI。

于 2013-09-26T19:47:01.143 回答
1

BroadcastReceivers 可以根据意图启动任何您想要的(活动、服务)。

您不想在 BroadcastReceiver 中填充的原因是因为它们只能在服务运行的地方存活很长时间,直到您告诉它停止。

如果您正在进行轮询或您真的不需要 BroadcastReceiver 的事情,您可以只使用服务(IntentService特别是)与您的警报管理器。IntentService 仅在它有事情要做时才会运行,这意味着它会自行停止,这与正常服务不同,您必须在完成后停止它。

于 2013-09-26T19:48:23.527 回答
1

为什么我不能在 BroadcastReceiver 中完成工作(比如通过互联网下载一些内容)?

根据Android文档广播接收器在主线程上调用onReceive方法,因此您不能在onReceive中执行下载任务。因为它会冻结UI并可能在3.0及以上版本中抛出异常。

如果要执行下载,那么最好的办法是在 onReceive 内部触发 IntentService ( IntentService 默认在后台线程上运行。)

于 2013-09-26T19:52:28.747 回答