android 栏目编辑,android – 编辑文本导致内存泄漏
介紹:
我有一個應用程序具有以下結構:
ActionBar頂部(ActionBarSherlock)
ViewPagerIndicator下面(對于選項卡)
ViewPager(主機片段)
我有一個問題,我的一個碎片導致了相當大的內(nèi)存泄漏.我將問題縮小到以下情況:
導致泄漏的片段只會在其onCreateView方法中夸大布局.這是通過以下方式完成的:
return inflater.inflate(R.layout.filter_auctions_fragment, container, false);
沒有什么不尋常的在這里
布局文件只包括一個ScrollView,LinearLayout和兩個EditText(包括更多通常的東西,但我把問題縮小到這些視圖,使其變得簡單).
現(xiàn)在用于添加片段的代碼:
mTabsAdapter.addTab(tabName,ProblematicFragment.class);
mTabsAdapter是TabsAdapter的實例,它是擴展支持庫的FragmentPagerAdapter的類.這是相當標準的,所以我不包括源碼來保持這個問題盡可能短.
現(xiàn)在有趣的部分:
這是當我旋轉我的設備來回轉動幾次時,堆會發(fā)生什么:
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
顯然,內(nèi)存泄漏.
是的,我知道它會導致從頭開始重新創(chuàng)建活動,這就是我想要的,因為我有不同的橫向和縱向模式的布局.不管怎樣,它不應該導致內(nèi)存泄漏.
我找到了這個問題的根源.這是我之前提到的兩個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
現(xiàn)在這就是我想看的!
為什么!?
有人可以告訴我為什么會發(fā)生這種情況嗎?我想補充說,我沒有在我的應用程序的任何地方保留對這些EditText對象的引用(我通常會這樣做,但即使我刪除了所有這些對象進行測試,泄漏仍然發(fā)生).
獎金 – MAT泄漏的屏幕截圖:
你可以看到有16個Fragment AND Activity的實例,而應該只有一個.
編輯:
我注意到,當我手動添加片段在不同的活動(使用FragmentManager.beginTransaction())泄漏不會發(fā)生!我現(xiàn)在完全迷惑了…
EDIT2:
刪除EditTexts的android:id屬性修復它…但現(xiàn)在他們是沒用的…
總結
以上是生活随笔為你收集整理的android 栏目编辑,android – 编辑文本导致内存泄漏的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 带弧形背景,[Andro
- 下一篇: 农民有福了?2020年农民养老金新政出炉