我知道这是被问了很多次的问题。然而,我从来没有找到答案。所以希望有人能给我一些启示。Android AsyncTask vs Thread + Handler vs rxjava
我们都知道AsyncTask和Thread是执行后台任务以避免ANR问题的选项。建议asynctask只能用于短时间运行的任务,而线程可用于长时间运行的任务。 asynctask不应该用于长时间任务的原因众所周知,这是由于asynctask可能导致的泄漏,因为它可能会在某个活动被破坏后继续运行。这是令人信服的。但是,它也会导致一些其他问题:
- 线程是否也独立于活动生命周期?因此,asynctask的风险也可以应用于线程。那么为什么线程适合长时间运行的任务呢?
- 看起来asynctask的风险只适用于与活动一起使用。如果我们在服务中使用它(不是IntentService,因为IntentService在其工作完成后停止),并且只要我们可以保证在服务停止时取消asyntask,我们可以将它用于长时间运行的任务吗?这是不是意味着在服务中使用asynctask是无风险的?
- 我玩过rxjava一段时间,真的很喜欢它。它消除了对线程操作的担心(除非你必须决定在哪个线程中订阅和观察发送的数据)。从我所看到的,rxjava(与其他一些libs一起,如retrofits)似乎是asynctask和thread的完美替代品。我想知道我们是否可以完全忘记它们,或者有任何特定情况下rxjava无法实现asynctask和thread可以做的事情,我应该知道的是什么?
感谢
感谢您的回答。那么它意味着总是使用rxjava而不是Asynctask和Thread?你能否在答案中“仔细”澄清你的意思?谢谢 –