Android with Service上的并发

在本教程中,我们将探索Service组件及其超类IntentService 。 您将学习何时以及如何使用此组件为长时间运行的后台操作创建出色的并发解决方案。 我们还将快速浏览IPC (进程间通信),以学习如何与运行在不同进程上的服务进行通信。

1.服务组件

Service组件是Android并发框架中非常重要的一部分。 它满足了在应用程序中执行长时间运行的需求,或者为其他应用程序提供了某些功能。 在本教程中,我们将只专注于Service的长期运行任务功能,以及如何使用此功能来提高并发性。

什么是服务?

Service是一个简单的组件,由系统实例化以执行一些长期运行的工作,这些工作不一定依赖于用户交互。 它可以独立于活动生命周期,也可以在完全不同的过程中运行。

在深入讨论Service代表什么之前,必须强调一点,即使服务通常用于长时间运行的后台操作并在不同的进程上执行任务, Service也不代表Thread或进程 。 如果明确要求,它将仅在后台线程或其他进程中运行。

Service具有两个主要功能:

  • 应用程序的一种功能,可以在后台将系统要执行的操作告知系统。
  • 应用程序将其某些功能公开给其他应用程序的工具。

服务和线程

关于服务和线程有很多困惑。 声明Service ,它不包含Thread 。 实际上,默认情况下,它直接在主线程上运行,并且对它所做的任何工作都可能冻结应用程序。 (除非它是IntentService ,它是已经配置了工作线程的Service子类。)

那么,服务如何提供并发解决方案? 嗯, Service默认情况下不包含线程,但是可以轻松地将其配置为与自己的线程或线程池一起使用。 我们将在下面看到更多信息。

无论缺少内置线程,对于某些情况下的并发问题, Service都是一个很好的解决方案。 选择Service不是其他并发解决方案(例如AsyncTask或HaMeR框架)的主要原因是:

  • Service可以独立于活动生命周期。
  • Service适合于长时间运行。
  • 服务不依赖于用户交互。
  • 当在不同的进程上运行时,即使系统资源短缺,Android也可以尝试保持服务活动。
  • 可以重新启动Service以恢复其工作。

服务类型

有两种Service类型,即启动绑定。

启动的服务通过Context.startService()启动。 通常,它仅执行一项操作,并且会无限期运行,直到操作结束,然后它会自行关闭。 通常,它不会向用户界面返回任何结果。

绑定服务是通过Context.bindService()启动的,它允许客户端和Service之间进行双向通信。 它还可以与多个客户端连接。 当没有任何客户端连接时,它会自我毁灭。

要在这两种类型之间进行选择, Service必须实现一些回调: onStartCommand()作为启动服务运行,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值