Android中服务和线程的区别?

时间:2012-02-05 05:40:40

标签: android

我需要知道的是,当我可以使用独立线程进行某些操作时,为什么我需要服务。 这是什么,服务可以做但线程不能? 我确实通过了很多帖子但找不到满意的答案。

3 个答案:

答案 0 :(得分:41)

服务:是android的一个组件,它在后台执行长时间运行操作,主要是没有UI。

线程:是一种O.S级别功能,允许您在后台执行某些操作。

虽然从概念上看两者看起来都很相似,但仍有一些重要的区别。

1.服务 - 如果在执行其作业时被销毁,则由于内存不足而在Android中间销毁。然后,如果您从onStartCommand()返回START_STICKY或START_REDELIVER_INTENT,那么android将确保它将重新启动您的服务。

2.Thread - 如果由于内存不足而被中间的android破坏,那么android将无法保证再次重启它。这意味着用户失去了他的一半工作。

3.Service - 是android的一个组件,因此在内存不足的情况下销毁应用程序时需要考虑优先级。

<强> 4。线程 - 不是android的一个组件,因此android在内存不足的情况下杀死应用程序时不会考虑线程优先级。

我将尝试解释第3点。

让我们说你需要从你的活动中连接到互联网。您可以通过使用服务(使用线程)或直接在活动中创建线程来实现。考虑第二种情况,即您在一个线程中连接到Internet。然后

i。如果用户关闭活动,而线程仍在后台运行,会发生什么。那个线程会继续在后台运行吗?答案是你无法真正预测的。

ii。假设继续上述情况,即使在查杀活动后,您的线程仍继续执行其预期的操作。然后手机中出现内存不足的情况。然后这个应用程序将成为第一个被杀死的应用程序,因为此应用程序没有优先权。

所以底线是:如果你想做一些繁重的后台功能,那么拥有一个带线程的服务总是更好。如果您认为只要您的活动处于活动状态,那么后台功能就会处于活动状态,那么请使用带有异步任务的线程或活动来进行活动。

希望它有所帮助。

答案 1 :(得分:12)

服务的主要好处是可以访问具有独立生命周期的Context对象。这允许通过许多活动重用公共代码,并且在公共或公开服务的情况下允许许多应用程序重用。

线程是一种在不阻止其他工作的情况下完成工作的机制。

服务不暗示线程,线程不暗示服务。它们是两个非常不同的东西。我倾向于在需要上下文来执行工作但希望将代码与我的活动隔离以提高可重用性的情况下使用服务。

答案 2 :(得分:3)

Difference between Service and Threaads

请访问此链接,我希望您能在此链接中找到答案。

简而言之,Service和Thread之间的主要区别在于,Service在其自己的线程上运行Main(UI)线程和Thread符文。如果我们将Service用于长任务,那么它可能会导致阻止主UI线程。

请访问指定链接了解更多详情。