android - 当您可以使用服务时,为什么还要使用 AsyncTasks?

标签 android multithreading asynchronous

当您学习为 Android 开发时,您会了解到如果在 ui 线程内运行任何类型的进程(花费超过 5 秒),系统将显示臭名昭著的 ANR 消息。就在那时,他们引入了邪恶的怪物……AsyncTask。一开始你把这个类看作是你的救星,但后来你意识到它是开发中最大的问题......处理旋转或 ui 事件变得如此成问题,甚至是痛苦的。 你们怎么看……AsyncTasks 值得麻烦吗?无论屏幕旋转如何,任何其他方法都可以减少执行长时间运行的任务的问题? 我猜你可能会说,嘿,你为什么不把它变成一个服务……是的,这是一个解决方案,但让我们回到我真正的问题。为什么我们不只使用服务并完全停止使用 AsyncTasks...它们到底有用吗?

最佳答案

在开发过程中,选择合适的执行组件总是好的。您需要明确您的需求,并根据它在 ServiceAsyncTask 之间进行选择。

  • 服务是独立于任何其他组件存在的 Android 组件。 Activity 可能来来去去,但如果您愿意,服务可以一直存在。它们扮演多种角色,从管理多个 Activity 所依赖的状态到充当 cron 作业再到处理更长的应用小部件更新。

  • AsyncTask 是一个安排在主应用程序线程之外执行某些工作的类。对于 AsyncTask 的实现者和用户而言,它如何发挥这种魔力通常并不重要。实际上,它使用线程池和工作队列。 AsyncTask 使用 Handler 来帮助安排要在主应用程序线程上完成的部分工作(例如,通知用户进度更新)。

有关更多说明,请参阅它们之间的区别。

enter image description here

关于android - 当您可以使用服务时,为什么还要使用 AsyncTasks?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11822039/

相关文章:

java - 无法从android接收php中的post参数?

android - 如何像 C 形一样弯曲矩形的起点?

javascript - @JavascriptInterface 无法解析

java - 在android中的线程内设置TextView值

java - 如何优化线程数以加快处理速度

java - 如果要同步读,是否还需要同步写?

ios - GCD 实现不适用于 PARSE 查询 (Swift)

javascript - 如何等待异步函数并收集响应

javascript - Node : Returning data from an async function

java - 在不同的类上使用 db4o