Android-Fragment 切換造成記憶體溢位,導致記憶體增長
當在Activity裡面有多個fragment的時候,來回切換fragment,會造成記憶體使用一直在增加。
由於fragment在呼叫remove之後,裡面的view的引用導致記憶體回收不了,造成記憶體洩露,所以不斷的new Fragment切換之後,記憶體使用一直在增加。
解決辦法:
在BaseFragment類裡面的onDestroyView()方法裡面呼叫如下方法
private void unbindDrawables(View view)
{
if (view.getBackground() != null)
{
view.getBackground().setCallback(null);
}
if (view instanceof ViewGroup && !(view instanceof AdapterView))
{
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++)
{
unbindDrawables(((ViewGroup) view).getChildAt(i));
}
((ViewGroup) view).removeAllViews();
}
}
例如:
@Override
public void onDestroyView() {
super.onDestroyView();
unbindDrawables(getView());
}
如有錯誤,請指正。相關文章
- return new物件造成溢位記憶體物件記憶體
- Java棧溢位|記憶體洩漏|記憶體溢位Java記憶體溢位
- 記憶體溢位記憶體溢位
- 記憶體溢位和記憶體洩露記憶體溢位記憶體洩露
- 記一次記憶體溢位導致的生產事故記憶體溢位
- 【記憶體洩漏和記憶體溢位】JavaScript之深入淺出理解記憶體洩漏和記憶體溢位記憶體溢位JavaScript
- Java記憶體溢位Java記憶體溢位
- JVM——記憶體洩漏與記憶體溢位JVM記憶體溢位
- 記一次Orika使用不當導致的記憶體溢位記憶體溢位
- JavaScript之記憶體溢位和記憶體洩漏JavaScript記憶體溢位
- JAVA記憶體區域與記憶體溢位異常Java記憶體溢位
- [Java基礎]記憶體洩漏和記憶體溢位Java記憶體溢位
- java記憶體溢位和記憶體洩漏的區別Java記憶體溢位
- jvm記憶體設定及記憶體溢位、解決方案JVM記憶體溢位
- JVM(2)-Java記憶體區域與記憶體溢位異常JVMJava記憶體溢位
- 日誌導致jvm記憶體溢位相關問題JVM記憶體溢位
- 為什麼 Go 中有的自定義 error 會導致記憶體溢位GoError記憶體溢位
- mybatis-plus getOne 記憶體溢位MyBatis記憶體溢位
- 記錄佇列序列化模型導致的記憶體溢位的解決方案佇列模型記憶體溢位
- JavaScript閉包(記憶體洩漏、溢位以及記憶體回收),超直白解析JavaScript記憶體
- 從記憶體洩露、記憶體溢位和堆外記憶體,JVM優化引數配置引數記憶體洩露記憶體溢位JVM優化
- 關於 PHP 記憶體溢位的思考PHP記憶體溢位
- 記憶體和棧溢位問題定位記憶體
- Windbg下使用dump分析記憶體溢位記憶體溢位
- php記憶體溢位了怎麼辦?PHP記憶體溢位
- Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)RedisError記憶體溢位
- Windows Tomcat 記憶體溢位解決方法WindowsTomcat記憶體溢位
- 避免PHP-FPM記憶體洩漏導致記憶體耗盡PHP記憶體
- 阿里大佬講解Java記憶體溢位示例(堆溢位、棧溢位)阿里Java記憶體溢位
- Java記憶體區域與記憶體溢位異常(JVM學習系列1)Java記憶體溢位JVM
- JVM學習-02-Java記憶體區域與記憶體溢位異常JVMJava記憶體溢位
- 簡單的記憶體“洩露”和“溢位”記憶體
- vue專案編譯node記憶體溢位Vue編譯記憶體溢位
- 強如 Disruptor 也發生記憶體溢位?記憶體溢位
- 基礎學習-記憶體溢位問題記憶體溢位
- BufferedImage記憶體洩漏和溢位問題記憶體
- Executors使用不當引起的記憶體溢位記憶體溢位
- tomcat記憶體溢位:PermGen space解決方法Tomcat記憶體溢位