在AsyncTask中保持对Fragment的强引用是否安全?

Mat*_*ias 5 android android-asynctask android-fragments

由于不建议Context在任务中保留对a的强引用(当任务仍在运行时上下文可能会被破坏,但是由任务保存在内存中),我想知道这些是否同样适用于Fragments?

片段管理其活动参考,并支持通过保留setRetainInstance.我可以假设,例如在片段中创建非静态内部AsyncTask是否安全,不会泄漏$this

Cod*_*man 6

在线程之间保持引用通常是不好的方法,而AsyncTask类似于线程.

没关系,只要你确保在使用它时取消引用它.

否则,您可能会出现内存泄漏.

在这种情况下,它没关系,因为你Fragment是在上下文中AsyncTask.任务完成后,它将丢失该引用.

如果这是在a中完成的Service,那将是一个非常糟糕的主意.

  • 在这种情况下,如果您在Fragment死亡时保留对asynctask的引用,则存在风险.用户可以说做一个从堆栈中弹出片段的动作.在这种情况下,您通常不希望Fragment的状态再次存在.如果你想要asynctask的状态,因为它包含你想要使用的额外数据,那么它将保留对Fragment的引用,即使Fragment不再存在.我相信它会从活动中分离出来,因为它经历了正常的生命周期,但它仍然会"存在". (2认同)