刚刚看到Google /O 2010 - Android客户端应用程序时,有人说:从服务开始长时间运行操作,据我所知(我的英语很差),其主要目的是防止应用程序被系统杀死。对吗?执行所有长时间运行的操作,而不仅仅是服务中的web操作,这是一个好做法吗?
正如我所理解的,如果我在活动中创建一个对象,然后应用程序进程就会被杀死,我就会失去这个对象,但是如果我在一个服务中创建这个对象,并且在进程被杀死之后--我的对象仍然是活着的。对吗?
(独立线程)与(服务+单独线程)
在我的问题中,有什么不同?
发布于 2012-12-07 07:36:03
1. Android中的Service是应用程序在后台工作的关键机制之一。
但是它可以很容易地使用一个简单的线程实现。
但是:*一旦应用程序不再对用户可见,它通常被认为是可以牺牲的,如果系统需要其他地方的内存,它就会被系统杀死。应用程序解决这一问题的主要方法是启动一个服务组件,该组件显式地告诉系统他们正在做一些有价值的工作,如果不需要的话,希望系统不要扼杀他们的进程。
因此,据我所知,对于我们的情况来说,这是常规线程和服务之间的区别。
发布于 2012-10-13 11:13:17
不完全是..。
你有些混淆了Destroyed和Killed的概念
销毁了--这是应用程序应该准备处理的事情。由于不同的原因(例如,设备方向的改变等),操作系统可能会破坏您的活动(通常事先调用onDestroy(),因此您有机会保存重要的内容),您的活动中的所有对象都将丢失。然而,您的应用程序可能包含一个以上的活动和/或服务,而有一个活动被破坏,并不意味着其他活动也将被删除。
杀死了操作系统可能会因为某种原因而杀死您的应用程序。这是通过杀死应用程序使用的进程来完成的,应用程序是运行组成应用程序的所有活动和服务的过程。您的应用程序将不会有任何警告,也不能做任何事情来防止这种情况。您所使用的所有对象(用于活动和服务)都将丢失。
话虽如此,在长期运行的活动中,Service的优势是什么?
让我们使用一个简单的例子:
如果您的活动正处于将一个大文件上载到服务器的过程中,并且用户决定更改设备方向,则该活动将被销毁,上载将被中断。即使在活动重新启动时重新启动上传,它也将从重新开始开始。
如果您有一个服务在某个活动的请求下执行上载内容,即使您的活动被破坏了,该服务仍然处于活动状态,并且上传不会中断。
备注:如果您有一个非常长的运行服务(运行时间超过半个小时),那么将其设置为foregroung服务,否则无论如何它都会被杀死。
https://stackoverflow.com/questions/12872190
复制相似问题