Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在另一个类或无头片段中使用Asynctask还会导致内存泄漏吗?_Android_Android Fragments_Memory Leaks_Android Asynctask_Headless Fragments - Fatal编程技术网

Android 在另一个类或无头片段中使用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
  • 或者,如果我们将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),请接受我的回答