AsyncTask 现在是否已通过 AsyncTaskLoader 弃用?
Is AsyncTask deprecated now w/ AsyncTaskLoader?
因为 AsyncTaskLoader
做了 AsyncTask
能做的一切,而且还具有内置的最佳实践功能,例如线程复制和过早死亡预防。
有什么理由再使用 AsyncTask
了吗?或者我应该到处盲目使用 AsyncTaskLoader
AsyncTaskLoader 仅对在 Activity 或 Fragment 中加载数据有用。 AsyncTask 更通用,可以在任何类型的组件中进行任何类型的后台操作。有 RxJava、HandlerThreads、简单线程等替代方案,但肯定不会弃用。
- 当你有一个后台作业需要完成时,无论 activity 是否被破坏:
Service
或 IntentService
某种后台作业机制。
- 当您有需要完成的后台作业并再次通知 UI 时:使用
AsyncTaskLoader
。
- 当您有需要完成的后台作业并再次通知用户并继续 运行 时,尽管 activity 已被销毁:使用
AsyncTask
因为 AsyncTask 继续 运行 当你的 activity 被 paused/destroyed/configuration 更改时......在这种情况下,请注意你的内存 leak/activity 对象为空。您必须自己处理。
每一种情况,都有不同的处理和规避方式。但请记住上面的流程以获得最简单的解决方案。
在 2017 年提出这个问题时,AsyncTask 仍然没有被弃用。
但是,它在 Android 11 中被弃用,因为 AsyncTask 需要大量检查以避免内存泄漏。
AndroidASOP项目中的commit有@deprecated
通知:
@deprecated Use the standard java.util.concurrent
or
Kotlin concurrency utilities instead.
因为 AsyncTaskLoader
做了 AsyncTask
能做的一切,而且还具有内置的最佳实践功能,例如线程复制和过早死亡预防。
有什么理由再使用 AsyncTask
了吗?或者我应该到处盲目使用 AsyncTaskLoader
AsyncTaskLoader 仅对在 Activity 或 Fragment 中加载数据有用。 AsyncTask 更通用,可以在任何类型的组件中进行任何类型的后台操作。有 RxJava、HandlerThreads、简单线程等替代方案,但肯定不会弃用。
- 当你有一个后台作业需要完成时,无论 activity 是否被破坏:
Service
或IntentService
某种后台作业机制。 - 当您有需要完成的后台作业并再次通知 UI 时:使用
AsyncTaskLoader
。 - 当您有需要完成的后台作业并再次通知用户并继续 运行 时,尽管 activity 已被销毁:使用
AsyncTask
因为 AsyncTask 继续 运行 当你的 activity 被 paused/destroyed/configuration 更改时......在这种情况下,请注意你的内存 leak/activity 对象为空。您必须自己处理。
每一种情况,都有不同的处理和规避方式。但请记住上面的流程以获得最简单的解决方案。
在 2017 年提出这个问题时,AsyncTask 仍然没有被弃用。 但是,它在 Android 11 中被弃用,因为 AsyncTask 需要大量检查以避免内存泄漏。
AndroidASOP项目中的commit有@deprecated
通知:
@deprecated Use the standard
java.util.concurrent
or Kotlin concurrency utilities instead.