何时在Android中使用线程/服务?

Cod*_*ody 29 java service multithreading android

什么时候应该使用线程或服务?

它们应该用于身份验证吗?例如,在我的应用程序中,我正在考虑使用线程或服务(我通过Active Directory进行身份验证.)

你有什么时候使用它们的例子吗?

Jim*_*myB 49

更新: Android文档似乎现在包含相应的说明,请参阅http://developer.android.com/reference/android/app/Service.html#WhatIsAService.

原始答案:

在Android中,a Service不提供任何并发执行("在后台运行").它实际上更像是一个简单的Java对象,它只是通过Android系统而不是你的应用程序来实例化(和管理)new.

因此,服务最重要的属性不是延迟工作量; 这可以通过简单的线程实现.

使服务对象与众不同的是它在Android系统中作为服务注册.这让系统知道这个对象提供某种服务,应该尽可能长时间保持活动,或者直到它停止.普通应用程序线程对Android系统没有这种特殊含义,并且由系统自行决定更加慷慨地终止.

因此,如果您只需要在应用程序/ Activity处于活动状态时继续执行某些后台活动,则线程可以执行您所需的操作.

如果你需要一个保持活动的组件,即使在一段时间之后,Android系统决定Activities从内存中移除你的内存,你也应该去寻找服务,甚至是"前台服务",这被认为更重要由系统,甚至不太可能终止回收资源.

当然,如果需要,Service还可以使对象包含一个或多个Thread实例,这些实例可以与Service对象本身一样长.

编辑:

哦,加号:如果你想向其他应用程序提供一些服务,那么服务当然是要走路,这些服务只能"绑定"到服务上.


Pat*_*fka 26

应该在长时间运行的进程中使用一个线程来阻止UI更新.如果它超过一两秒,您可能希望将其放入后台线程并通过对话框或微调器等通知用户.如果锁定UI线程超过5秒,操作系统将提示用户选择"终止或等待"选项.

服务不在单独的线程上运行,因此它将阻止UI,但您可以在服务中生成新线程.服务更多地用于某个间隔应该发生的事情,或者在没有显示UI的情况下继续运行/检查某些事情.

  • [Android服务](http://developer.android.com/reference/android/app/Service.html)将阻止操作系统的UI线程而不仅仅是你的 - "这意味着,如果你的服务要做任何CPU密集(如MP3播放)或阻塞(如网络)操作,它应该产生自己的线程来做这项工作." (7认同)
  • `服务不在单独的线程上运行,所以它会阻止UI,嗯?服务没有UI.哪一个会阻止? (4认同)
  • 我想,您的意思是说来自活动的服务呼叫将在呼叫期间阻止活动的UI.也许你应该澄清一下. (4认同)
  • 卡夫卡是对的.服务在主线程上运行,因此您应该将工作卸载到AsyncThread或类似服务中的内容.从没有UI不遵循它不是或不可能或不会在主线程中运行.你可以*通常*假设,但并非总是如此. (2认同)