1

如果我想从 Android 设备向远程服务发出请求,我可以使用 AsyncTask、AsyncTaskLoader、Intent 等在 UI 线程之外发出请求。似乎有很多选择,但我很困惑如何在其中选择。你能解释一下何时以及使用哪个吗?另外,除了我上面提到的,还有其他选择吗?

4

1 回答 1

1

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

  • 意向服务
  • 本机线程

现在,您问题的关键点是“何时使用它”,这将是我的答案:在软件中,唯一的黄金刚性规则是“取决于规则”,软件开发中没有任何硬性规则,总是有不同的方式解决软件中的问题(我想这就是其中“软”一词的原因......)这正是它总是依赖的原因,它取决于你需要的任何东西,尽管一种方法可能是最常见的方法例如“AsyncTask”,这并不意味着 AsyncTaks 总是要走的路,它总是取决于影响您的功能的因素和需求。现在有很多事情可以使用 AsyncTaks 来执行,而您可能只需要一个普通的通用 Native 线程。

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

这是我通常考虑以一种或另一种方式实现的事物列表,此列表不适用于所有场景,但可能会给您一个想法。

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

Native Java Threads - 我知道当我的任务与 android 中的任何视图完全不相关并且不需要监视时使用这个工具很好(例如:从远程数据库中删除/添加数据,并且响应可能只影响不会像配置首选项一样显示的持久性元素)

IntentService - 当我想以队列处理器方式执行一次性任务时,但不像原生线程,在这里我想要一些应用程序上下文,以便可能绑定活动等......

问候!

于 2013-09-12T22:54:43.130 回答