在这种情况下,我为什么要使用服务?

时间:2013-09-26 19:43:08

标签: android android-intent android-service

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

正如你所看到的,它基本上做了以下事情(请纠正我,如果我错了,请):

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

第一站。MyReceiver正在延长BroadcastReceiver。是否可以将Intent启动到正常的Activity?

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

第二站。:和以前一样:BroadcastReceiver,只能启动作为服务的Intents吗?或者它可以启动正常活动吗?为什么我甚至不得不打电话给任何新的意图?为什么我不能在BroadcastReceiver中完成这项工作(比如通过互联网下载一些内容)?

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

非常感谢你。

3 个答案:

答案 0 :(得分:1)

BroadcastReceiver只是在接收广播时做任何你想做的事情的手段。

ServiceActivity不同,不会被Android操作系统轻易杀死。 Service没有GUI。

答案 1 :(得分:1)

BroadcastReceivers可以通过意图启动您想要的任何内容(活动,服务)。

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

如果您正在进行轮询或其他事情,您真的不需要BroadcastReceiver,您可以只使用一个服务(具体为IntentService)与您的警报管理器。 IntentService只运行很长时间才有意义,这意味着它将自行停止,而不像普通服务那样,你必须在完成后停止它。

答案 2 :(得分:1)

  

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

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

如果你想进行下载,那么最好的办法是在onReceive中触发IntentService(默认情况下,IntentService在后台线程上运行。)