如何避免android中的内存泄漏
我正在动态更新tablelayout,如下所示,其中我为每个tableRow添加了一个imagebutton和一个Textview。每当我启动活动时,它只显示4行(实际上应该显示10行),但如果我在代码中保留断点并缓慢调试以找出问题,它会正确显示所有10行。我怀疑这一定是代码中的内存问题,因为我从网络上获取的图像占用了大量内存。我尝试在添加到布局后释放视图内存,但它一直在崩溃。如何避免android中的内存泄漏,android,memory,memory-leaks,Android,Memory,Memory Leaks,我正在动态更新tablelayout,如下所示,其中我为每个tableRow添加了一个imagebutton和一个Textview。每当我启动活动时,它只显示4行(实际上应该显示10行),但如果我在代码中保留断点并缓慢调试以找出问题,它会正确显示所有10行。我怀疑这一定是代码中的内存问题,因为我从网络上获取的图像占用了大量内存。我尝试在添加到布局后释放视图内存,但它一直在崩溃。 请让我知道我哪里做错了 for (int i = 0; i < parsedExampleDataSet.get
请让我知道我哪里做错了
for (int i = 0; i < parsedExampleDataSet.getAppNameString().size(); i++)
{
TableRow row = new TableRow(this);
TextView tv = new TextView(this);
tv.setText("AppName: "+ parsedExampleDataSet.getAppNameString().get(i) +"\n" + "Description: " + parsedExampleDataSet.getDescriptionString().get(i));
ImageButton imgBtn = new ImageButton(this);
URL aURL = new URL(parsedExampleDataSet.getImageUrlString().get(i));
URLConnection conn = aURL.openConnection();
conn.connect();
InputStream is = conn.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
Bitmap bm = BitmapFactory.decodeStream(bis);
imgBtn.setImageBitmap(bm);
imgBtn.setBackgroundColor(color.transparent);
imgBtn.setTag(parsedExampleDataSet.getMarketLinkString().get(i));
bis.close();
is.close();
row.addView(imgBtn);
row.addView(tv);
table.addView(row,new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); //here table is a tablelayout object
for(int i=0;i
}
提前感谢Prathima如果要加载多行,请使用ListView 它处理所有内存问题,比TableLayout更好
这是一个很好的例子。答案似乎位于
parsedExampleDataSet.getAppNameString().size()
:
- 运行程序时,(;)的
循环仅迭代4次
- 当您手动运行调试器和单步执行时,它会迭代10次,这是根据您的预期进行的
上限,并且它似乎随时间而变化。如果它是由一个异步进程(线程)填充的,这将解释这个问题
请随意添加更多细节,并让我知道。我将根据您将带来的新元素进一步编辑/阐述此答案。堆栈跟踪是什么?如何获得parsedExampleDataSet?它不是在单独的线程中解析的吗?你有没有试着打印出它的大小?@ania::没有,它是在同一个线程中解析的。我不想打印尺寸()。我现在就做。谢谢,谢谢!我是android的新手。最初我尝试使用listview实现这个功能,但我无法正确理解这个概念。所以我选择了桌面布局