服务和广播接收器有什么区别?


14

我不断听到有关服务广播接收者的信息。什么是它们之间的区别,以及它们如何影响从我的角度来看我的Android手机的操作?


您知道,不是在TCP层上创建端口,而是始终创建广播接收器以节省电池和大量处理。.当android中发生某些事件时....广播会在手机内发送到所有应用程序。已将广播接收器写入该事件,它将被自动调用。从技术上讲,该事件的发生被称为Android方面的意图
Rahul Raina 2015年

Answers:


27

Android应用程序具有三种组件。通常,用户不需要了解它们:它们是应用程序作者将特定行为编程到其应用程序中的一种方式。但是,如果您正在密切注意应用程序的行为(例如,在任务管理器中),或者正在使用Tasker之类的应用程序使事情自动化,那么了解它们在系统中的组合方式将很有帮助。

一个活动是最熟悉的类型的组件:这是你可以看到一个窗口:要么全屏或对话框的大小。活动仅在屏幕上显示时运行。退出活动后,Android会将该应用保留在内存中,以准备再次启动,但是该活动将无法运行,这意味着它不会消耗电池或网络。应用程序使用意图启动活动。目的可以明确指定要启动的活动,也可以指定要执行的操作(例如打开特定文件)。如果一个以上的活动可以“处理”该意图,则会看到对话框要求您选择一个。

服务是另一应用程序组件。一旦另一个组件(可能是活动或另一个服务)启动了服务,它就会在后台运行,直到自身停止。这意味着一项服务可能会使您的手机保持唤醒状态(使用唤醒锁),耗尽电池电量或使用大量网络数据,而屏幕上没有任何显示。

应用程序可以使用服务在后台执行长时间运行的流程,例如从服务器下载文件,检查电子邮件或检查您的位置。尽管服务不会显示或直接与您互动,但它们仍会显示在“正在运行的应用程序”列表中。在“ 设置”应用中,选择“ 应用”或“ 应用管理器”,然后选择“ 运行”。您可以通过这种方式停止服务,但这通常不是必需的。由于服务不是直接可见的,因此Android认为服务不如活动重要,因此当手机需要更多内存时,它们将是第一个被杀死的服务。

广播接收器是第三种组件。就像服务一样,它们仅存在于后台,不会直接与您互动。但是与服务不同,它们无法保持运行或执行长时间的任务:它们存在以响应事件。与活动和服务不同,一次即可启动一个以上的广播接收器。

组件可能向一个应用程序广播意图,但更频繁地广播意图而不指定特定的应用程序。在这种情况下,意图通常表示发生的事件,例如电池电量不足。系统查找所有已注册兴趣的广播接收机(使用意图过滤器),然后依次运行每个广播接收机。每个广播接收器都可以立即做出反应,例如通过创建通知来进行响应,或者可以启动服务或活动以采取进一步的措施。广播接收器处理完事件后,它将立即停止并且不会再次运行,直到广播另一个类似事件为止。

当您从Google Play下载应用程序时,这三个组件共同工作的一个例子。首先,Google Play活动提供了可视界面,供您选择要下载的内容。应用程序列表可能是一项活动;单击“安装”按钮将启动另一个活动,以显示确认或付款对话框。确认后,对话框活动将启动服务。即使活动已完成并且不再运行,该服务仍将继续下载内容。

但是,在下载新应用程序时,手机可能会失去Internet连接。如果发生这种情况,Google Play的下载服务将注册一个广播接收器,并带有一个意图过滤器,表明它对网络连接更改感兴趣,然后该服务将自行停止。当电话连接到Internet时,系统广播事件。Android将启动已注册Google Play服务的广播接收器,以及等待该事件的任何其他广播接收器。在这种情况下,广播接收器将再次启动下载服务。该服务将在下载进行时创建通知,当下载完成时,它将发送自己的广播以通知其他应用程序已安装新软件包,然后自行停止。反过来,这将从其他应用开始广播接收器,

综上所述:-

  • 活动代表屏幕上的窗口;服务执行可能长期运行的后台任务;广播接收器运行时间很短,以处理事件。
  • 所有这三个都是使用意图启动的,但是使用了不同的机制。启动应用程序必须明确声明要启动哪种类型的组件(在每种情况下都通过调用不同的方法)。
  • 当应用使用意图启动活动时,它只会启动一个活动(可能显示“使用...完成操作”对话框以让您选择哪个活动),服务也是如此,但是广播意图可能会开始多个广播接收器,可能来自不同的应用程序。
  • 作为用户,您可以直接与活动进行交互;您不会与服务互动,但是它们会降低电话速度并消耗资源;您无需与广播接收器进行交互,并且由于它们的寿命短,因此您无需担心如何管理它们。

一个非常有用的答案。我只想确认一下:被用户禁用的应用程序会怎样?Android是否会针对其注册意图启动其广播接收器?还是那些禁用的应用程序可以在后台运行其服务?为什么即使重新启动后,禁用的应用程序的“强制停止”按钮也不显示为灰色?我很清楚,他们的活动无法开展。
Firelord

@Firelord如果有新问题,应将其发布为新问题。评论不允许深入的答案,也无法使其他访客找到您的问题。
Dan Hulme

很棒的帖子,但实际上有四个部分。内容提供者缺失。
亚历山德·马丁
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.