分离螺纹VS服务+分离螺纹

时间:2012-10-13 10:23:45

标签: android service android-service

刚刚看到Google I / O 2010 - Android REST客户端应用程序,据说:  从服务开始长时间运行的操作 据我所知(我的英语很差)  这样做的主要目的是防止应用程序被系统杀死。对? 从服务中执行所有长期运行操作是不错的做法?

据我了解,如果我在活动中创建一个对象,然后应用程序进程将被终止,我将丢失此对象,但如果我在服务中创建此对象并且进程将被终止 - 我的对象仍将存活。对?

(独立线程)VS(服务+独立线程)

我的问题背景有什么不同?

2 个答案:

答案 0 :(得分:2)

不完全......

您可以将概念DestroyedKilled

混合在一起

<强>销毁 这是您的应用程序应该准备好处理的事情。由于可能有不同的原因(即设备方向改变等)OS可能会破坏您的活动(通常事先调用onDestroy(),因此您有机会保存重要内容)并且活动中的所有对象都将丢失。但是,您的应用程序可能包含多个活动和/或服务,并且一个活动被销毁,并不意味着其他活动也会被破坏。

<强>终止 操作系统可能会因某种原因决定终止您的申请。这是通过终止应用程序使用的进程来完成的,该进程是运行组成应用程序的所有活动和服务的过程。您的应用程序不会有任何警告,也无法阻止此操作。您的应用程序中的所有对象(由活动和服务使用)都将丢失。

话虽如此,在长期活动中,Service的优势是什么?

让我们用一个简单的例子:

如果您的活动处于将大型文件上传到服务器的过程中,并且用户决定更改设备方向,则活动将被销毁并且上传中断。即使在活动重新开始时重新开始上传,也会从重新开始。

如果您有一项服务在活动请求下执行上传内容,即使您的活动是destroyd,该服务仍然有效,上传仍然没有中断。

备注: 如果你有一个非常长时间运行的服务(将运行超过半小时),那么将其设为 foregroung service ,否则它将被杀死。

答案 1 :(得分:0)

<强> 1。 Android中的Service API是应用程序在后台工作的关键机制之一。

但它可以使用简单的线程轻松实现。

<强> BUT: * 一旦应用程序不再对用户可见,它通常被认为是可消耗的,并且如果它在其他地方需要内存则被系统杀死。应用程序解决这个问题的主要方法是启动一个Service组件,该组件明确告诉系统他们正在做一些有价值的工作,并且如果系统不真正需要,系统不会终止他们的进程。 *

据我所知,对于我们的情况,常规线程和服务之间存在差异。