在Android中进行异步服务调用的方法?什么时候使用哪个?

时间:2013-09-12 22:36:22

标签: android android-intent android-asynctask asynctaskloader

如果我想从Android设备向远程服务发出请求,我可以使用AsyncTask,AsyncTaskLoader,Intent等来创建除UI线程之外的请求。似乎有很多选择,但我很困惑如何选择它们。你能解释一下使用的时间和使用方法吗?另外,除了我提到的那些之外还有其他选择吗?

1 个答案:

答案 0 :(得分:1)

这是一个广泛讨论的问题,因为Android提供了一长串能够异步处理服务调用的机制,除了你提到的那个,还有:

  • IntentService
  • 原生主题

现在,你问题的关键点是“何时使用它”,这将是我的答案: 在软件中,唯一的严格规则是“它依赖于规则”,软件开发中没有任何硬性规则,总是有不同的方法来处理软件中的问题(我猜这就是“软”这个词的原因。 。)这就是为什么它总是取决于它,它取决于你需要什么,虽然一种方法可能是最常见的方式,例如“AsyncTask”,但它并不意味着AsyncTaks总是要走的路,它总是取决于影响您的功能的因素和需求。现在有很多东西可以使用AsyncTaks执行,但是你可能只需要一个普通的常用Native Thread。

能够对最合适的方法做出决定的唯一方法是了解工具周围的所有功能,例如大多数人90%的时间只使用AsyncTaks在单独的线程上运行doInbackGround,但可能甚至不需要preExecute,publishProgress,postExecute等,这就是常规线程可以做的事情,就像这个例子那样为了进行远程调用而提供的每一个对象的功能,但是正如我已经多次提到的,这一切都取决于您需要什么以及哪种工具更适合您的需求。请记住,软件中使用的“如何,何时和什么”没有硬编码规则,所有依赖,以及在“DEPENDS”中做出正确决策会使优秀开发人员与优秀开发人员之间产生差异......

这是我通常采用的方式列表,无论是这种方式还是其他方式,此列表不适用于所有方案,但可能会给你一个想法。

AsyncTaks-我知道在需要监控功能时使用asynctaks是一个好主意,通过监控我的意思是,我需要跟踪工作中的进度,如(下载/任务进度),因为那是正是AsyncTask最初创建的内容,它是附加到“The Task Pattern”创建的,如果我不需要使用至少两种AsyncTaks提供的监视方法,如onPreExecute,onProgressUpdate,onCancelled等。我知道可能有另一种方法来实现它。

原生Java线程 - 我知道当我的任务与android中的任何视图无关时,使用此工具是好的,并且不需要进行监视(例如:从远程数据库中删除/添加数据,以及响应可能只影响不会像配置首选项那样显示的持久性元素)

IntentService - 当我想以队列处理器或时尚的方式执行一次性任务,但是不喜欢本机线程时,在这里我想要一些应用程序上下文以便绑定一个活动等...

问候!