【发布时间】:2014-02-25 16:15:35
【问题描述】:
我有一些 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 都会启动。
【问题讨论】:
-
由于您加载的可绘制对象,它似乎有很多分配/解除分配。也许尝试使用您的可绘制对象的缓存?
-
这可能是因为很多人在 edittext 持有活动上下文时遇到问题。我面临同样的问题找不到解决方案,虽然它似乎只适用于某些设备stackoverflow.com/questions/14069501/…
-
我持有一个应用程序上下文而不是活动上下文。但无论如何它可以是ICS bug。我没有“果冻豆”版本。所以我无法测试那里是否是同样的问题。
标签: android garbage-collection android-edittext