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

标签 android android-intent android-asynctask asynctaskloader

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

最佳答案

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

  • Intent 服务
  • native 线程

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

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

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

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

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

IntentService - 当我想以队列处理器方式执行一次性任务时,但与 native 线程不同,这里我想要一些应用程序上下文以便可能绑定(bind) Activity 等...

问候!

关于android - 在 Android 中进行异步服务调用的方法?什么时候使用哪个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18775406/

相关文章:

android - 谷歌播放错误 "Error while retrieving information from server [DF-DFERH-01]"

android - 哪种方法我应该采用 1 个接收器和 10 个滤波器或 10 个接收器和 1 个滤波器

android - 无法实例化接收器,java.lang.IllegalAccessException : access to class not allowed

java - 这是启动 Activity 的正确方法吗?

php - 如何在我的Listview中添加onItemClick以使用Asynctask从MYSQL获取数据

android - 在没有用户交互的情况下在设备中运行 Android apk

android - 在本地 codenameone android build 中包含 cn1lib?

java - Android蓝牙实时数据流慢

java - 当我将它传递给 asyncTask 时,Android Location 对象返回 null

Android AsyncTask 和 Mockito(或 PowreMockito)