刚刚看到Google I / O 2010 - Android REST客户端应用程序,据说: 从服务开始长时间运行的操作 据我所知(我的英语很差) 这样做的主要目的是防止应用程序被系统杀死。对? 从服务中执行所有长期运行操作是不错的做法?
据我了解,如果我在活动中创建一个对象,然后应用程序进程将被终止,我将丢失此对象,但如果我在服务中创建此对象并且进程将被终止 - 我的对象仍将存活。对?
(独立线程)VS(服务+独立线程)
我的问题背景有什么不同?
答案 0 :(得分:2)
不完全......
您可以将概念Destroyed
和Killed
<强>销毁强>
这是您的应用程序应该准备好处理的事情。由于可能有不同的原因(即设备方向改变等)OS可能会破坏您的活动(通常事先调用onDestroy()
,因此您有机会保存重要内容)并且活动中的所有对象都将丢失。但是,您的应用程序可能包含多个活动和/或服务,并且一个活动被销毁,并不意味着其他活动也会被破坏。
<强>终止强> 操作系统可能会因某种原因决定终止您的申请。这是通过终止应用程序使用的进程来完成的,该进程是运行组成应用程序的所有活动和服务的过程。您的应用程序不会有任何警告,也无法阻止此操作。您的应用程序中的所有对象(由活动和服务使用)都将丢失。
话虽如此,在长期活动中,Service
的优势是什么?
让我们用一个简单的例子:
如果您的活动处于将大型文件上传到服务器的过程中,并且用户决定更改设备方向,则活动将被销毁并且上传中断。即使在活动重新开始时重新开始上传,也会从重新开始。
如果您有一项服务在活动请求下执行上传内容,即使您的活动是destroyd,该服务仍然有效,上传仍然没有中断。
备注:强> 如果你有一个非常长时间运行的服务(将运行超过半小时),那么将其设为 foregroung service ,否则它将被杀死。
答案 1 :(得分:0)
<强> 1。 Android中的Service API是应用程序在后台工作的关键机制之一。
但它可以使用简单的线程轻松实现。
<强> BUT:强> * 一旦应用程序不再对用户可见,它通常被认为是可消耗的,并且如果它在其他地方需要内存则被系统杀死。应用程序解决这个问题的主要方法是启动一个Service组件,该组件明确告诉系统他们正在做一些有价值的工作,并且如果系统不真正需要,系统不会终止他们的进程。 *
据我所知,对于我们的情况,常规线程和服务之间存在差异。