2014-12-03 192 views
4

今天在接受采访时我被问到了这个问题。服务如何在后台运行 - Android

什么是服务? 我回复的服务是Android的基本组件,它没有UI并且在后台运行。

服务是否在主线程上运行? 否

那么它如何在后台运行? .......

我是空白的。有人能解释一下,如果服务在ui线程中运行,服务如何在后台运行。

谢谢。

+0

服务在ui /主线程上运行。 – Blackbelt 2014-12-03 16:50:38

+0

@Blackbelt你的意思是说他们不会在后台运行?背景中的 – ik024 2014-12-03 16:51:44

+0

意味着别的东西。我认为文档中带有* background *意味着服务能够在没有用户交互的情况下运行,即使所有活动都已暂停。 – Blackbelt 2014-12-03 16:54:20

回答

2

服务在UI线程上运行。要在后台运行服务任务,您需要在该服务中生成一个新线程。在服务上下文中的'背景'可以被看作'可以不用UI运行',但并不意味着它运行在它自己的线程中。

+1

嗯,你说得对。但是他们仍然不应该使用“背景”这个词 – ik024 2014-12-03 17:01:34

+0

服务对我有什么好处,那么,如果它在UI线程上运行? 如果我需要创建一个新的线程无论如何,为什么我不会在主程序上创建我的线程,就是这样? 在这种情况下服务的好处是什么? – Cookienator 2016-09-25 19:24:21

+0

服务的好处是它可以在没有可见活动(UI,View)的情况下运行,因此用户可以离开您的应用程序并进入主屏幕并且操作仍将继续。完成后,您还可以处理结果并将其存储在某个地方。在活动中运行线程的情况下,活动将被破坏,并且会丢失(或泄漏)可能导致崩溃/内存不足异常的上下文。 – 2016-09-26 08:54:45

2
official source

报价:

请记住,如果你使用一个服务,它仍然在默认情况下,您的 应用程序的主线程中运行,所以你还是应该在服务中创建一个新的 线程,如果它执行密集或阻止 操作。

“UI线程”基本上就是您的应用程序使用的主线程,它运行的是UI。它根本不限于运行UI。