繁体   English   中英

Android应用程序产生线程与服务之间的区别?

[英]Difference between Android application spawning thread vs. Service?

我有一个Android应用程序,需要在后台和单独的线程上执行工作。 对于我的第一个概念验证,我将Application类子类化,并在onCreate()中生成一个执行后台工作的Thread。 这很有用。 但是,我刚才意识到,过去我曾在这种情况下使用过服务。

问题是,是否有理由对从Service生成的Thread而不是Application.onCreate()生成的Thread进行操作? 该服务应该执行“后台”工作(它使用UI线程,除非使用了线程,我知道),它独立于Activity,并且可以在没有Activity可见的情况下运行。 使用基于应用程序的线程似乎也完成了所有这些。 通过不使用服务,它实际上消除了复杂性,因为Activity只是访问应用程序单例。 据我所知,我没有必要绑定到服务。

我会得到使用服务会阻止的生命周期案例吗? 这是我对这种方法的唯一担忧,但除此之外,我并没有以服务的好处出售。

不同之处在于,如果您希望线程仅在Activity正在运行时在后台运行,或者您希望它在用户离开时继续运行。

即使Activity不再可用,服务也能够在后台运行。 它们旨在用于您的应用程序在不久的将来没有任何用户参与的情况下继续工作。 如果您在Service运行Thread ,即使用户离开应用程序,线程也将继续运行。 这有时是有益的,因为用户可能希望您继续下载非常大的文件但不希望应用程序继续在前台运行。 然后,几个小时(几天,几个月,几年)之后用户可以重新进入应用程序以读取文件。

但是,如果您正在使用需要根据结果不断更新UI的线程,则在Activity中启动它可能更有利,因为它没有在服务中运行的真正目的。 在你的程序中,如果它在Activity而不是Service中,你可以更容易地与UI交谈。 (可能有一些性能优势,因为Android不需要在其列表上处理另一个服务,但这纯粹是我的猜测。我没有证据。)

注意:即使活动退出,在活动中创建的线程仍将继续运行。 但是,这仅仅是因为应用程序仍在内存中。 当Activity不再在视图中时,Activity及其线程的优先级高于从服务线程中删除的内存。

如果您的应用程序不在前台或可见,那么它更有可能被系统杀死。 如果您将代码作为服务运行,而不是由后台进程生成的线程,那么您的任务将存活更长时间。 无法保证,因此您仍需要正确管理流程生命周期,但作为服务运行可能会提供更可靠的结果。

请参阅http://developer.android.com/guide/topics/fundamentals/processes-and-threads.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM