Android 当我没有';不需要进程间通信吗?

Android 当我没有';不需要进程间通信吗?,android,service,Android,Service,似乎当我不需要进程间通信时,几乎没有理由使用服务。我知道的唯一原因是:如果我的进程有一个已启动的服务,那么该进程被终止的可能性较小 我只需要一个带有dontWantToBeKilled()和canBeKilled()方法的实用程序类,它将启动/停止一个虚拟服务。除此之外,我不会使用服务。这是否正确?即使服务与活动在同一进程中运行也不能保证您的活动不会被终止 发件人: 例如,将图片上载到网站的活动 应该启动一个服务来执行上传,以便上传可以 即使用户离开活动,也要在后台继续。使用 服务保证操作至少有

似乎当我不需要进程间通信时,几乎没有理由使用服务。我知道的唯一原因是:如果我的进程有一个已启动的服务,那么该进程被终止的可能性较小


我只需要一个带有dontWantToBeKilled()和canBeKilled()方法的实用程序类,它将启动/停止一个虚拟服务。除此之外,我不会使用服务。这是否正确?

即使
服务
活动在同一进程中运行
也不能保证您的
活动
不会被终止

发件人:

例如,将图片上载到网站的活动 应该启动一个服务来执行上传,以便上传可以 即使用户离开活动,也要在后台继续。使用 服务保证操作至少有“服务” “流程”优先级,而不管活动发生了什么。这是 同样的原因是广播接收器应该使用服务,而不是 而不是简单地将耗时的操作放在线程中

结论:
如果您想执行需要一段时间的后台操作,并且正确完成该操作非常重要,请使用
服务

,即使
服务
活动
在同一进程中运行,但没有任何东西可以保证您的
活动
不会被终止

发件人:

例如,将图片上载到网站的活动 应该启动一个服务来执行上传,以便上传可以 即使用户离开活动,也要在后台继续。使用 服务保证操作至少有“服务” “流程”优先级,而不管活动发生了什么。这是 同样的原因是广播接收器应该使用服务,而不是 而不是简单地将耗时的操作放在线程中

结论:
如果要执行需要一段时间的后台操作,并且正确完成该操作很重要,请使用
服务

如果进程启动了服务,进程很可能会被终止。实际上进程是否保持活动状态并不影响服务。因为它完全是后台过程。可能是您启动了一个进程而只是启动了一个服务。所以进程和服务不能像这样相互关联


抱歉,我没有正确回答您的最后一个问题。

如果流程启动服务,进程很可能会被终止。实际上进程是否保持活动状态并不影响服务。因为它完全是后台过程。可能是您启动了一个进程而只是启动了一个服务。所以进程和服务不能像这样相互关联


好吧,我没有正确回答你的最后一个问题。

是的,还有其他原因

应用程序运行在一个进程中,当它需要更多资源时,系统可能会终止该进程

据了解,正在运行的服务比不在前台的活动具有更高的优先级,这意味着系统更有可能杀死在后台有活动的应用程序进程,而不是在后台运行服务的应用程序进程

服务文档说明:


因此,您可以使用服务来降低应用程序进程被终止的可能性

是的,还有其他原因

应用程序运行在一个进程中,当它需要更多资源时,系统可能会终止该进程

据了解,正在运行的服务比不在前台的活动具有更高的优先级,这意味着系统更有可能杀死在后台有活动的应用程序进程,而不是在后台运行服务的应用程序进程

服务文档说明:


因此,您可以使用服务来降低应用程序进程被终止的可能性

我知道我的活动可以被终止,但“终止”只是将Android对它的引用置零,以便垃圾收集器可以将其从内存中删除。只有当整个进程被终止时,才会删除具有静态引用(如单例)的对象。我认为,对于长时间的后台操作,使用singleton并调用启动/停止虚拟服务的dontWantToBeKilled()和canBeKilled()实用程序方法通常更简单。Android服务是一个有缺陷的设计,或者是一个文档记录非常糟糕的设计。@fhucho:为什么要使用单例而不是
服务
?有很多事情使得使用服务比使用单例更复杂、更困难。我不必做异步绑定,我不必将数据序列化到startService,我不必理解不同的标志,startId等。Singleton更简单、更直接。与其花时间设置Singleton来创建/销毁
服务
,不如花时间学习如何正确使用
服务
。我理解服务,但它们比Singleton更难使用。使用dontWantToBeKilled()和canBeKilled()方法创建一个实用程序类后,我可以使用简单的单例,而不是处理与我的服务的异步通信。我知道我的活动可以被终止,但“终止”只是将Android对它的引用置零,以便垃圾收集器可以将其从内存中删除。只有当整个进程被终止时,才会删除具有静态引用(如单例)的对象。我认为,对于长时间的后台操作,使用singleton并调用启动/停止虚拟服务的dontWantToBeKilled()和canBeKilled()实用程序方法通常更简单。安卓服务是一个有缺陷的设计,或者是一个非常糟糕的文档设计。@fhucho:你为什么要用单例而不是
服务呢