【问题标题】:Difference between Service and Broadcast receivers in androidandroid中服务和广播接收器之间的区别
【发布时间】:2012-02-11 23:32:53
【问题描述】:

我想知道服务和广播接收器之间的区别,谁能指出一个可以在android移动设备上观察到的例子。 谢谢

【问题讨论】:

    标签: android service broadcast


    【解决方案1】:

    服务:如果你想在后台做某事,即使应用程序关闭,它也会一直在后台运行。您可以在单独的过程中创建它,也可以根据需要将服务提供给其他应用程序。下载任何内容或音乐就是很好的例子

    广播接收器:通常系统会发送一些信息,如果您愿意,您的应用可以通过注册接收这些信息。当事情发生时,您可以使用 onReceive 方法做您想做的事情。 示例是当新短信到达或启动完成时系统将发送 BroadcastReceiver

    这是一篇好文章:Service and BroadcastReceiver

    【讨论】:

      【解决方案2】:

      Service 用于当你想在后台做某事时,任何长时间运行的进程都可以使用后台服务来完成。例如,您想在应用程序关闭时播放音乐。在这种情况下,服务将在背景音乐中运行。

      Example of Service

      BroadcastReceiver 用于在某些事件期间触发某些东西或代码。例如,事件可以在设备启动上。如果您想在设备启动、日期和时间更改等时执行某些操作...

      Example of BroadcastReceiver

      【讨论】:

      • 这里的区别当然是显而易见的,但是在 receiving some event 的帮助下,有 1 个用法使 2 个变得相似。我在开始学习使用 GCM 的 Push Notification 时发现了 Service 的用法。在客户端,它们有 2 个服务 GcmListenerServiceInstanceIdListenerService - 当然我们需要在这里使用服务,以便它们可以在后台运行,但在这种情况下它们的行为 很像 BroadcastReceiver 的作用是,有类似于OnReceive 的回调,它们会根据Intent(通过IntentFilter 指定)的某些广播触发。
      【解决方案3】:

      我认为这可能是另一种方式。 Service 接收专门发送到您的应用程序的意图,就像 Activity 一样。 广播接收器接收在系统范围内向设备上安装的所有应用广播的意图。

      (我说 Service 有点像 Activity 的原因是:您不会在设备上安装的所有应用程序中广播“启动 Activity MyActivity”的消息。它仅适用于您的特定应用程序。 )

      当然,正如其他人所提到的,服务可以在后台继续运行,而广播接收器应该快速完成(例如,如果它运行超过 5 秒,它可能会被操作系统杀死)。在某些情况下,广播接收器仍然可以在后台运行(当应用程序关闭时)。为此,值得一提的是,实际上有两种类型的广播接收器——清单声明的和上下文注册的。它们有不同的生命周期和限制——前者可以在后台接收广播,但有一定的限制,而后者不能在后台接收广播(应用程序必须正在运行且处于活动状态),但对可以接收的意图类型没有限制。

      必须专门调用服务和广播接收器(通过意图),但对于服务,这通常是特定调用(例如,当您的应用启动时或当用户单击某个按钮时),而对于广播接收器,它们不会需要明确启动,因为它们无论如何都会在进行相关广播时启动。

      这是我的想法:

      Type Displays UI? Can continue running for a long time when app is closed? Can receive intents when app is closed? Intents must specifically target your app? Restricted list of intents that can be specified?
      Activity Yes No Yes Yes No
      Service No Yes Yes Yes No
      Manifest-declared Broadcast Receiver No No Yes No Yes1
      Context-registered Broadcast Receiver No No No No No

      1:仅适用于 Android 8.0 或更高版本。如果意图专门针对您的应用,则不会应用这些限制。可以在here找到受限的意图列表。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-23
        • 1970-01-01
        相关资源
        最近更新 更多