2012-10-13 75 views
0

刚刚看到谷歌I/O 2010 - 它被声称Android REST客户端应用程序: 开始长从服务 而且据我了解正在运行的操作(我的英语很差) 的这样做的主要目的是防止应用程序被系统杀死。对? 它是很好的做法,从服务执行所有长期运行的操作,不仅网络的呢?单独的线程VS SERVICE +单独的线程

据我了解,如果我在活动中创建一个对象,然后应用程序进程将被杀死,我将失去这个对象,但如果我在一个服务中创建这个对象,并且后续进程将被杀死 - 我的对象仍然活着。对?

(单独的线程)VS(SERVICE +单独的线程)

什么是我的问题的情况下有什么不同?

+0

没有人对这个主题感兴趣? – pvllnspk

回答

0

1.在Android上的服务API是应用程序做的工作在后台的主要机制之一。

但它可以很容易地使用简单的线程来实现。

但是: * 一旦应用程序不再是人们普遍认为消耗用户和候选人可见由系统如果它需要在其他地方的内存被杀死。应用程序解决这个问题的主要方式是启动一个Service组件,该组件明确告诉系统他们正在做一些有价值的工作,并且如果系统不真正需要,他们宁愿系统不会杀死他们的进程。 *

所以据我所知,这是一个普通的线程和我们的情况下的服务之间的区别。

2

不完全是......

您somewhow混合销毁 这是东西,你的应用程序应该做好应对的概念DestroyedKilled

。对于可能在不同的原因(即设备方向的变化,和其他)操作系统可能会破坏你的活动(通常叫onDestroy()提前,让你有机会救什么是重要的),并且在活动中的所有对象都将丢失。然而,你的应用程序可能包含一个以上的activitiy和/或服务,以及有一个活动被破坏,并不意味着其他人将被estroyed为好。

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

话虽如此,在whats's长时间运行的活动Service的优势在哪里?

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

如果你的活动是在大型文件上载到服务器的midle,用户决定改变设备的方向,该活动将被销毁,上传中断。即使在活动重新启动时重新启动上传,它也会从开始再次开始。

如果你有一个服务从活动根据要求做上传东西,即使你的活动destroyd,服务保持工作状态,上传继续而不imterruption。

注: 如果你有一个很长的正在运行的服务(将要运行更多然后一个半小时),然后让它为foregroung服务,否则将会被杀死反正。

+0

如果一个活动被破坏,单独的线程会被杀死吗?不,我想。 所以我仍然没有得到我主要问题的答案。 – pvllnspk

+0

SEPARATE THREAD VS SERVICE + SEPARATE THREAD – pvllnspk

+0

如果您在活动中创建线程,则应在活动结束时终止线程,或者您需要使用'onRetainNonConfigurationInstance()'将其重新注释到新活动中,if一个将被创建。否则,您将拥有一个orfan线程,您不能再控制或通信。 – Luis