如何避免android中的内存泄漏

时间:2011-07-21 05:38:08

标签: android memory memory-leaks

我正在动态更新tablelayout,如下所示,我为每个tableRow附加了一个imagebutton和一个Textview。每当我启动我的活动时它只显示4行(实际上应该显示10行)但是如果我在代码中保留断点并且慢慢调试以找出它正确显示所有10行的问题。我怀疑它必须是代码中的内存问题,因为我从网上获取图像,我觉得需要大量的内存。我添加到布局后尝试释放视图内存,但它一直在崩溃 请让我知道我做错了什么。

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

}

提前致谢
Prathima

2 个答案:

答案 0 :(得分:0)

如果要加载多行而不是使用ListView。

它处理所有内存问题,并且优于TableLayout。

here就是一个很好的例子。

答案 1 :(得分:0)

答案似乎位于parsedExampleDataSet.getAppNameString().size()

  • 运行程序时,for(;;)循环只迭代4次

  • 当您运行调试器并手动步进时,它会迭代10次,这是根据您的期望

如何填充parsedExampleDataSet.getAppNameString()?它的大小用作for(;;)循环的上限,它似乎随时间而变化。如果它由异步进程(线程)填充,这将解释问题。

随意添加更多详情并告诉我们。我将进一步编辑/详细说明您将带来的新元素。