我有一些 EditTexts 什么都不做。我跳过了所有监听器和过滤器以查看清晰的图片。EditText 具有以下结构:
EditText et1 = new EditText(this);
et1.setId(num+1);
RelativeLayout.LayoutParams etp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
etp.addRule(RelativeLayout.LEFT_OF,et2.getId());
etp.addRule(RelativeLayout.BELOW,et3.getId());
etp.setMargins(0, 0, 5, 5);
et1.setLayoutParams(etp);
et1.setBackgroundResource(R.drawable.someXMLDrawable);
RelativeLayout content = new RelativeLayout(this);
content.addView(et1);
当我单击 EditText 时,它会运行垃圾收集器。如果从一个字段单击到另一个字段,我将得到下一张图片:
D/dalvikvm(387): GC_CONCURRENT freed 1513K, 43% free 10451K/18055K, paused 1ms+3ms
I/dalvikvm-heap(387): Grow heap (frag case) to 13.731MB for 1190416-byte allocation
D/dalvikvm(387): GC_CONCURRENT freed 1525K, 43% free 10451K/18055K, paused 2ms+2ms
I/dalvikvm-heap(387): Grow heap (frag case) to 13.729MB for 1190416-byte allocation
D/dalvikvm(387): GC_CONCURRENT freed 1438K, 42% free 10540K/18055K, paused 2ms+2ms
I/dalvikvm-heap(387): Grow heap (frag case) to 13.723MB for 1190416-byte allocation
D/dalvikvm(387): GC_CONCURRENT freed 1436K, 42% free 10540K/18055K, paused 2ms+3ms
I/dalvikvm-heap(387): Grow heap (frag case) to 13.720MB for 1190416-byte allocation
D/dalvikvm(387): GC_CONCURRENT freed 1432K, 42% free 10540K/18055K, paused 1ms+3ms
I/dalvikvm-heap(387): Grow heap (frag case) to 13.721MB for 1190416-byte allocation
D/dalvikvm(387): GC_CONCURRENT freed 1435K, 42% free 10540K/18055K, paused 2ms+3ms
D/dalvikvm(278): GC_CONCURRENT freed 1839K, 63% free 12684K/33863K, paused 7ms+3ms
D/dalvikvm(190): GC_CONCURRENT freed 1652K, 74% free 14590K/54343K, paused 5ms+10ms
D/dalvikvm(190): GC_CONCURRENT freed 234K, 71% free 16243K/54343K, paused 9ms+19ms
I/dalvikvm-heap(190): Grow heap (frag case) to 29.055MB for 6553616-byte allocation
D/dalvikvm(190): GC_CONCURRENT freed 22K, 55% free 24826K/54343K, paused 9ms+20ms
这是正常情况吗?我可以以某种方式修复它吗?
编辑:我有一个 ViewPager。它包含片段。片段由空的 RelativeLayout 组成。当应用程序启动时,它会根据动态生成并添加到 RelativeLayout 的按钮和编辑文本来接收 JSNO 字符串。由于 EditText 或 Button 需要一个上下文,它使用“getActivity()”返回相关的活动上下文。有时我需要从 RelativeLayout 中删除所有视图并创建新视图,因为删除的视图引用了 Activity,GC 无法清理它,我不知道确切,这是另一个问题(如果有人知道答案,会很好听到)。
所以控件从 JSON 字符串动态生成,我们不知道它们的确切数量。这就是我想做的。
问题是 - 为什么每次点击 EditText 时 GC 都会启动。