介绍:

我有一个应用程序具有以下结构:

ActionBar顶部(ActionBarSherlock)

ViewPagerIndicator下面(对于选项卡)

ViewPager(主机片段)

我有一个问题,我的一个碎片导致了相当大的内存泄漏.我将问题缩小到以下情况:

导致泄漏的片段只会在其onCreateView方法中夸大布局.这是通过以下方式完成的:

return inflater.inflate(R.layout.filter_auctions_fragment, container, false);

没有什么不寻常的在这里

布局文件只包括一个ScrollView,LinearLayout和两个EditText(包括更多通常的东西,但我把问题缩小到这些视图,使其变得简单).

现在用于添加片段的代码:

mTabsAdapter.addTab(tabName,ProblematicFragment.class);

mTabsAdapter是TabsAdapter的实例,它是扩展支持库的FragmentPagerAdapter的类.这是相当标准的,所以我不包括源码来保持这个问题尽可能短.

现在有趣的部分:

这是当我旋转我的设备来回转动几次时,堆会发生什么:

12-28 12:26:27.180: D/dalvikvm(18841): GC_CONCURRENT freed 530K, 7% free 10701K/11436K, paused 4ms+7ms, total 58ms

12-28 12:26:27.180: D/dalvikvm(18841): WAIT_FOR_CONCURRENT_GC blocked 24ms

12-28 12:26:28.270: D/dalvikvm(18841): GC_CONCURRENT freed 737K, 8% free 11048K/11964K, paused 4ms+5ms, total 53ms

12-28 12:26:29.510: D/dalvikvm(18841): GC_CONCURRENT freed 789K, 8% free 11464K/12436K, paused 5ms+5ms, total 42ms

12-28 12:26:30.640: D/dalvikvm(18841): GC_CONCURRENT freed 888K, 9% free 11919K/12984K, paused 4ms+5ms, total 52ms

12-28 12:26:31.810: D/dalvikvm(18841): GC_CONCURRENT freed 903K, 8% free 12421K/13500K, paused 3ms+8ms, total 58ms

12-28 12:26:33.800: D/dalvikvm(18841): GC_CONCURRENT freed 1092K, 9% free 13005K/14272K, paused 4ms+6ms, total 59ms

12-28 12:26:33.800: D/dalvikvm(18841): WAIT_FOR_CONCURRENT_GC blocked 20ms

12-28 12:26:36.000: D/dalvikvm(18841): GC_CONCURRENT freed 1355K, 11% free 13518K/15048K, paused 3ms+8ms, total 74ms

12-28 12:26:36.000: D/dalvikvm(18841): WAIT_FOR_CONCURRENT_GC blocked 19ms

12-28 12:26:38.110: D/dalvikvm(18841): GC_CONCURRENT freed 1450K, 11% free 14106K/15720K, paused 3ms+11ms, total 72ms

12-28 12:26:40.450: D/dalvikvm(18841): GC_CONCURRENT freed 1530K, 11% free 14807K/16516K, paused 2ms+15ms, total 75ms

12-28 12:26:40.450: D/dalvikvm(18841): WAIT_FOR_CONCURRENT_GC blocked 29ms

12-28 12:26:43.030: D/dalvikvm(18841): GC_CONCURRENT freed 1682K, 11% free 15591K/17452K, paused 3ms+10ms, total 66ms

12-28 12:26:43.030: D/dalvikvm(18841): WAIT_FOR_CONCURRENT_GC blocked 32ms

显然,内存泄漏.

是的,我知道它会导致从头开始重新创建活动,这就是我想要的,因为我有不同的横向和纵向模式的布局.不管怎样,它不应该导致内存泄漏.

我找到了这个问题的根源.这是我之前提到的两个EditText.一旦我从布局中删除它们并进行相同的测试(来回旋转).这些是我得到的GC消息:

12-28 12:21:41.270: D/dalvikvm(17934): GC_CONCURRENT freed 534K, 7% free 10853K/11576K, paused 3ms+7ms, total 44ms

12-28 12:21:42.560: D/dalvikvm(17934): GC_CONCURRENT freed 818K, 9% free 11113K/12108K, paused 11ms+9ms, total 95ms

12-28 12:21:44.680: D/dalvikvm(17934): GC_CONCURRENT freed 1036K, 10% free 11313K/12528K, paused 3ms+6ms, total 54ms

12-28 12:21:44.680: D/dalvikvm(17934): WAIT_FOR_CONCURRENT_GC blocked 15ms

12-28 12:21:47.420: D/dalvikvm(17934): GC_CONCURRENT freed 1089K, 10% free 11510K/12780K, paused 2ms+6ms, total 79ms

12-28 12:21:47.420: D/dalvikvm(17934): WAIT_FOR_CONCURRENT_GC blocked 39ms

12-28 12:21:50.200: D/dalvikvm(17934): GC_CONCURRENT freed 1317K, 12% free 11461K/12956K, paused 4ms+13ms, total 84ms

12-28 12:21:53.210: D/dalvikvm(17934): GC_CONCURRENT freed 1629K, 14% free 11148K/12956K, paused 3ms+7ms, total 47ms

12-28 12:21:55.580: D/dalvikvm(17934): GC_CONCURRENT freed 1056K, 13% free 11302K/12956K, paused 4ms+7ms, total 59ms

12-28 12:21:57.280: D/dalvikvm(17934): GC_CONCURRENT freed 1306K, 14% free 11200K/12956K, paused 5ms+5ms, total 82ms

12-28 12:21:59.420: D/dalvikvm(17934): GC_CONCURRENT freed 1035K, 12% free 11408K/12956K, paused 3ms+7ms, total 55ms

12-28 12:22:01.990: D/dalvikvm(17934): GC_CONCURRENT freed 1392K, 13% free 11352K/12956K, paused 4ms+9ms, total 54ms

12-28 12:22:01.990: D/dalvikvm(17934): WAIT_FOR_CONCURRENT_GC blocked 30ms

现在这就是我想看的!

为什么!?

有人可以告诉我为什么会发生这种情况吗?我想补充说,我没有在我的应用程序的任何地方保留对这些EditText对象的引用(我通常会这样做,但即使我删除了所有这些对象进行测试,泄漏仍然发生).

奖金 – MAT泄漏的屏幕截图:

你可以看到有16个Fragment AND Activity的实例,而应该只有一个.

编辑:

我注意到,当我手动添加片段在不同的活动(使用FragmentManager.beginTransaction())泄漏不会发生!我现在完全迷惑了…

EDIT2:

删除EditTexts的android:id属性修复它…但现在他们是没用的…

android 栏目编辑,android – 编辑文本导致内存泄漏相关推荐

  1. android的内存泄露有几种,Android中几种有可能会导致内存泄露的情况

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 1.Static静态成员导致的内存泄露 将占用大量内存空间的变量声明为static静态类型.当Activity被销毁的时 ...

  2. Android 系统(87)---常见的内存泄漏原因及解决方法

    常见的内存泄漏原因及解决方法 (Memory Leak,内存泄漏) 为什么会产生内存泄漏? 当一个对象已经不需要再使用本该被回收时,另外一个正在使用的对象持有它的引用从而导致它不能被回收,这导致本该被 ...

  3. nstimer循环引用_解决NSTimer循环引用导致内存泄漏的六种方法

    demo放在了GitHub 内存泄漏的原因: self强引用timer.timer添加在runloop上,只要timer不销毁self就销毁不了.当然了你可以选择在viewWillDisappear中 ...

  4. 会不会导致内存泄漏_可能会导致.NET内存泄露的8种行为

    原文连接:https://michaelscodingspot.com/ways-to-cause-memory-leaks-in-dotnet/ 作者 Michael Shpilt.授权翻译,转载请 ...

  5. 使用智能指针错误导致内存泄漏_C++智能指针使用的那些事

    指针指针的由来 在C/C++里面,内存管理由开发者自己管理.指针变量总是指向一片内存空间,这片内存空间可以是局部变量.也可以是通过malloc.new申请的.如果申请的内存没有释放,就会导致内存泄漏. ...

  6. fastjson带泛型序列化导致内存泄漏

    fastjson带泛型序列化导致内存泄漏 一.背景 某日早上,生产环境告警群出现了大量响应时间在1s多的慢接口,在应用日志中也能找到不少接口超时熔断(响应时间>=5s). 当中有不少接口的SQL ...

  7. android编译非静态内部类,Android 非静态内部类/匿名类引起的内存泄漏

    一.概述 让我们先来回顾一下android内存泄漏的相关概念: 内存溢出:android系统会给每个安卓程序分配一定的内存,当程序所使用的内存超过最大值就会造成内存溢出,就是常说的OOM 内存泄漏:简 ...

  8. Android小知识-单例引起的内存泄漏

    本平台的文章更新会有延迟,大家可以关注微信公众号-顾林海,包括年底前会更新kotlin由浅入深系列教程,目前计划在微信公众号进行首发,如果大家想获取最新教程,请关注微信公众 单例模式在Android开 ...

  9. java 单例 内存释放_周小抒 – 梦想仗剑走天涯 | Android中关于Context单例模式引起的内存泄漏以及解决方案...

    内存溢出与内存泄漏的区别: 内存溢出是由于应用所消耗的内存或者应用申请的内存超出了虚拟机分配的内存,也就是内存不够用了. 内存泄漏是某个不再使用对象由于被其他实例引用,导致不能被GC回收,而导致的内存 ...

最新文章

  1. 自回归与非自回归模型如何兼得?预训练模型BANG或许可解
  2. matplot.bar 与matplot.barh绘制直方图案例大全
  3. Centos5.5下安装LAMP完整版
  4. iOS 添加字体并使用
  5. 疫情之下,这些公司开始给员工发菜了!
  6. getprivateprofilestring读不到数据_电商系列(三)如何构建数据库的主从架构!
  7. LC #134 JS
  8. matlab线性拟合和非线性拟合,matlab多元非线性拟合
  9. 《深入理解Nginx 模块开发与架构解析》之高级数据结构摘录
  10. 计算机风扇维修,教你简单修理电脑散热风扇
  11. 人工智能:从单细胞生物的智能说起
  12. java 网络编程 总结篇
  13. Snipaste截图软件的下载和使用(日常常用的一些功能)
  14. Bzoj 2563: 阿狸和桃子的游戏 题解
  15. 光模块:PCB设计方法
  16. 慢阻肺患者安全过冬指南
  17. char 类型的数组,在函数内能最大能定义多大?
  18. 三、支持GPT硬盘格式启动的U盘PE
  19. 【07月16日】A股滚动市净率PB历史新低排名
  20. 软件测试工程师Linux笔试题及答案(三)

热门文章

  1. 《从零开始学ASP.NET CORE MVC》:VS2019创建ASP.NET Core Web程序(三)
  2. VS2017创建ASP.NET Core Web程序
  3. 在 .NET Core 中运行 JavaScript
  4. KubeCon+CloudNativeCon首秀中国!
  5. 横向扩展你的ASP.NET Core SignalR 应用
  6. 跟着老桂学ASP.NET Core 2.0
  7. 活动: 北京Xamarin分享会第4期(2017年7月8日)
  8. .NET Core New csproj 如何发布可执行文件
  9. 哪一个不是linux常用的shell,Linux下查看使用的是哪种shell的方法汇总
  10. 通宵爆肝:C语言下的平衡二叉树(Avl)原来如此简单!