我在安卓开发者网站上浏览了Bound Service。我认为我对服务已经足够了解了,但我只是找到了另一种连接服务的方法,通过使用Messenger类来连接服务,特别是对于本地服务。在那里我弄糊涂了。也许我把概念搞错了。
这是我对Android Service的理解。在以下情况下创建服务
如果你想在background.
混淆是列表中的第一项,背景的定义。后台不是线程或进程吗?我从来没有想过它可以在主线程上运行。
以下是开发页面中关于服务的注意事项。
Caution:服务在其宿主进程的主线程中运行-服务不会创建自己的线程,也不会在单独的进程中运行(除非您另行指定)。这意味着,如果您的服务要执行任何CPU密集型工作或阻塞操作(例如MP3回放或联网),您应该在该服务中创建一个新线程来执行该工作。通过使用单独的线程,您将降低应用程序未响应(ANR)错误的风险,并且应用程序的主线程可以保持专用于用户与您的活动的交互。
问题
发布于 2015-05-19 12:57:17
应用程序主线程并不总是UI线程。例如,当Activity停止时,将调用onStop(),因此UI线程将从该Activity中移除,并移动到相同或不同应用程序中的另一个活动中。然而,这并不意味着应用程序不再活动,它可以继续在后台工作,直到操作系统或用户关闭它。那么是谁让它在后台运行呢?它是主线程,而不是UI线程。
什么是服务
在安卓中,服务是一个应用程序组件,可以在UI线程的后台执行长时间运行的操作。通过后台,这意味着它没有用户界面。默认情况下,服务在调用组件的进程的主线程上运行(因此可能会降低响应性并导致ANR),因此您应该创建一个新的线程来执行长时间运行的操作。还可以使服务在完全不同的进程中运行。
与活动组件不同,服务没有任何图形界面。此外,广播接收器用于接收广播消息(广播、多播、单播)并执行短任务,而服务旨在执行冗长的处理,如流式音乐、网络事务、文件I/O、与数据库交互等。当服务由诸如活动之类的应用程序组件启动时,即使用户切换到另一应用程序或启动组件本身被破坏,服务也在后台运行并保持运行
为什么使用服务
服务被赋予比其他后台进程更高的优先级,因此安卓终止它的可能性较小。尽管可以将其配置为在有充足的资源可用时重新启动。您应该在有关进程和线程的文档中了解不同的进程及其优先级/重要级别。为它们分配与前台活动相同的优先级绝对是可能的,在这种情况下,它需要有一个可见的通知活动(通常用于播放音乐的服务)。
如果您不想自己管理线程,请使用IntentService。否则,请使用AsyncTasks。
请将这篇优秀的文章读给understand more in detail和read this answer。
发布于 2020-05-02 00:10:56
服务基本上在UI线程或主thread.But中运行,如果我们要在服务中执行长时间运行的操作,我们需要创建一个后台线程并执行该任务。
但是为什么我们必须使用服务?
现在让我们想一想,音乐Application.We需要连续播放歌曲,即使我们离开音乐app.If我们使用活动,我们不能实现以上的requirement.So,服务在这种情况下是有帮助的。即使应用程序不在前台,服务继续运行,我们能够收听songs.This是我们使用服务的原因,即使它运行在主线程上。
发布于 2017-11-29 07:16:42
简而言之,服务在UI线程的后台运行。您可以执行客户端-服务器身份验证之类的任务,也可以写入数据库,这些任务是在后台完成的,没有图形界面。
但是,如果您正在执行可能冻结接口的非常长的处理任务,则可以在单独的线程上使用服务。
例如,单独线程上的服务是IntentService
https://stackoverflow.com/questions/30316906
复制相似问题