【发布时间】:2023-04-11 08:00:01
【问题描述】:
我在创建大量 LinearLayout 和 TextView 时遇到问题
基本上我的应用程序显示文本,我在相应的行中动态创建行(LinearLayout)和单词(TexView)。现在我的应用程序也使用FragmentStatePagerAdapter,所以我可以“更改页面”。对于那件事我没有任何疑问。问题是当我使用新的 textsize 重定向到我自己的活动时,它在添加行时会以某种方式泄漏。
int threshold = 25;
int tw = 0;
LinearLayout ll = rootView.findViewById(R.id.container);
LinearLayout row = new LinearLayout(a);
for(int x = 0;x<words.size();x++)
{
tw+=words.get(x).length;
TextView tv = new TextView(a);
tv.setText(words.get(x));
if(tw > threshold)
{
ll.addView(row) <----- this is where out of memory points me
row = new LinearLayout(a);
tw = 0;
x-=1;
}
else
row.addView(tv);
}
现在我也尝试转储堆并使用 mat 进行分析,但是我创建的转储有一个无效的标头错误,所以除了我在 logcat 中指向的实际错误日志之外,我不知道实际泄漏来自哪里ll 添加我不知道是否适合查看的行。
已编辑:添加了一些信息。当我通过线性布局参数调整行高时,似乎会出现问题,因为当我设置自己的默认值 50 时,通常就可以了。有人知道这是什么原因吗?
【问题讨论】:
-
可能有死循环。
-
死循环是什么意思?你的意思是因为x-=1?但我将 tw 初始化为 0,所以下一次迭代应该继续。
-
为什么单词都有size方法和length属性?