如何避免android中的内存泄漏

如何避免android中的内存泄漏,android,memory,memory-leaks,Android,Memory,Memory Leaks,我正在动态更新tablelayout,如下所示,其中我为每个tableRow添加了一个imagebutton和一个Textview。每当我启动活动时,它只显示4行(实际上应该显示10行),但如果我在代码中保留断点并缓慢调试以找出问题,它会正确显示所有10行。我怀疑这一定是代码中的内存问题,因为我从网络上获取的图像占用了大量内存。我尝试在添加到布局后释放视图内存,但它一直在崩溃。 请让我知道我哪里做错了 for (int i = 0; i < parsedExampleDataSet.get

我正在动态更新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
for(int i=0;i
}

提前感谢

Prathima

如果要加载多行,请使用ListView

它处理所有内存问题,比TableLayout更好


这是一个很好的例子。

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

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

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

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


请随意添加更多细节,并让我知道。我将根据您将带来的新元素进一步编辑/阐述此答案。

堆栈跟踪是什么?如何获得parsedExampleDataSet?它不是在单独的线程中解析的吗?你有没有试着打印出它的大小?@ania::没有,它是在同一个线程中解析的。我不想打印尺寸()。我现在就做。谢谢,谢谢!我是android的新手。最初我尝试使用listview实现这个功能,但我无法正确理解这个概念。所以我选择了桌面布局