【发布时间】:2017-02-13 07:06:24
【问题描述】:
我知道这是被问过很多次的问题。但是,有些事情我从未找到答案。所以希望有人能给我一些启示。
我们都知道 AsyncTask 和 Thread 是执行后台任务以避免 ANR 问题的选项。建议 asynctask 只用于短时间运行的任务,而 thread 可用于长时间运行的任务。 asynctask 不应该用于长任务的原因是众所周知的,这是关于 asynctask 可能导致的泄漏,因为它可能在活动被破坏后继续运行。这是令人信服的。但是,这也导致了一些其他问题:
- 线程不是也独立于活动生命周期吗?因此,异步任务的风险也可以应用于线程。那么为什么线程适合长时间运行的任务呢?
- 看起来 asynctask 的风险仅在与活动一起使用时才适用。如果我们在服务中使用它(不是IntentService,因为IntentService在它的工作完成后停止了),并且只要我们能够保证在服务停止时取消异步任务,我们可以将它用于长时间运行的任务吗?这是否意味着在服务中使用 asynctask 是无风险的?
- 我玩过 rxjava 有一段时间了,非常喜欢它。它消除了担心线程的需要(除非您必须决定在哪个线程中订阅并观察发出的数据)。据我所知,rxjava(与其他一些库如改造)似乎是 asynctask 和线程的完美替代品。我想知道我们是否可以完全忘记它们,或者有任何特定情况 rxjava 无法实现我应该知道的 asynctask 和 thread 可以做什么?
谢谢
【问题讨论】:
标签: android multithreading android-asynctask rx-java android-handler