Android 在另一个类或无头片段中使用Asynctask还会导致内存泄漏吗?
我已经读到,使用asynctask作为活动的内部类会导致内存泄漏,因为它不会让活动被垃圾收集,也因为隐式引用。 如果我们使用以下不同方法,是否会发生相同的内存泄漏:-Android 在另一个类或无头片段中使用Asynctask还会导致内存泄漏吗?,android,android-fragments,memory-leaks,android-asynctask,headless-fragments,Android,Android Fragments,Memory Leaks,Android Asynctask,Headless Fragments,我已经读到,使用asynctask作为活动的内部类会导致内存泄漏,因为它不会让活动被垃圾收集,也因为隐式引用。 如果我们使用以下不同方法,是否会发生相同的内存泄漏:- 在单独的类中使用AsyncTask 或者,如果我们将AsyncTask与无头片段一起使用(使用其setRetainInstance(true)方法来避免其破坏) 我已经实现了headless fragment方法,它工作得很好,因为asynctask对象只创建了一次,它由headless fragment控制,但我无法确定活动
- 在单独的类中使用AsyncTask
- 或者,如果我们将AsyncTask与无头片段一起使用(使用其
方法来避免其破坏)setRetainInstance(true)
我已经实现了headless fragment方法,它工作得很好,因为asynctask对象只创建了一次,它由headless fragment控制,但我无法确定活动问题的内存泄漏是否已经消失,或者它是否仍然存在。首先,您可以将库用作或学习如何使用android探查器以查找泄漏。考虑到并非所有专家都同意小泄漏必须被固定,有些泄漏很小,不会造成大麻烦。 无头碎片法应该是好的。
为了回答你的第一个问题,考虑你可以让静态的内部类如所说明的,也解释了如何做一个弱引用,这将很容易垃圾收集< /p>我想出了一个替代AsyncTask的装载机,但发现它已经被弃用由于一些问题。Android文档建议使用MVVM作为替代方案。我研究了它是什么,发现使用AsuncTask+MVVM是生命周期友好的、整洁的,并且可以避免内存泄漏。我会试试的。你怎么看?加载程序甚至AsyncTask都很老派,看看LiveData和RXJava吧。但首先是LiveData,RXJava对Principiant来说真的很难。我在研究MVVM时研究过LiveData。我所理解的是它是一个数据包装器,可以通过视图(即活动)观察到。它不仅包含视图的数据,还包含与视图的坐标/同步。我不知道RxJava,但我知道人们也在建议改造。我是一名Android初学者,所以我刚刚开始探索:)Man LeakCanary很棒:)我对内存泄漏的大部分疑虑现在都很清楚了,这要归功于:Dyou真的很受欢迎,(内存泄漏有时会很麻烦,取决于库或SDK),请接受我的回答