我知道这个问题已经被问了很多次,但有一些东西我从来没有找到答案。希望有人能给我一些启示。
我们都知道AsyncTask和Thread是执行后台任务的选项,以避免ANR问题。建议只使用asynctask来处理短时间运行的任务,而线程可以用于长时间运行的任务。为什么asynctask不应该用于长时间运行的任务,原因是关于可能由asynctask引起的泄露问题,因为它可能在activity销毁后继续运行。这很有说服力。然而,这也引出了一些其他问题:
1. 线程不也独立于activity的生命周期吗?因此,与asynctask相关的风险也可以适用于线程。那么为什么线程适合长时间运行的任务呢?
2. 看起来asynctask的风险只适用于在activity中使用。如果我们在服务中使用(asynctask),并且只要我们保证在服务停止时取消asynctask,我们是否可以将其用于长时间运行的任务?这是否意味着在服务中使用asynctask是无风险的?
3. 我已经使用rxjava一段时间了,真的很喜欢它。它消除了担心线程的需要(除非您必须决定在哪个线程中订阅和观察已发射的数据)。从我所看到的情况来看,rxjava(与一些其他库如retrofits结合使用)似乎是asynctask和线程的完美替代品。我想知道我们是否可以完全忘记它们,或者是否有任何特殊情况,rxjava不能实现asynctask和线程所能做的事情,我应该注意什么?
谢谢
我们都知道AsyncTask和Thread是执行后台任务的选项,以避免ANR问题。建议只使用asynctask来处理短时间运行的任务,而线程可以用于长时间运行的任务。为什么asynctask不应该用于长时间运行的任务,原因是关于可能由asynctask引起的泄露问题,因为它可能在activity销毁后继续运行。这很有说服力。然而,这也引出了一些其他问题:
1. 线程不也独立于activity的生命周期吗?因此,与asynctask相关的风险也可以适用于线程。那么为什么线程适合长时间运行的任务呢?
2. 看起来asynctask的风险只适用于在activity中使用。如果我们在服务中使用(asynctask),并且只要我们保证在服务停止时取消asynctask,我们是否可以将其用于长时间运行的任务?这是否意味着在服务中使用asynctask是无风险的?
3. 我已经使用rxjava一段时间了,真的很喜欢它。它消除了担心线程的需要(除非您必须决定在哪个线程中订阅和观察已发射的数据)。从我所看到的情况来看,rxjava(与一些其他库如retrofits结合使用)似乎是asynctask和线程的完美替代品。我想知道我们是否可以完全忘记它们,或者是否有任何特殊情况,rxjava不能实现asynctask和线程所能做的事情,我应该注意什么?
谢谢