2011-07-21 54 views
0

我正在動態更新tablelayout,如下所示,其中我爲每個tableRow添加一個imagebutton和Textview。每當啓動我的活動時,它只顯示4行(實際應顯示10行),但如果我在代碼中保留斷點並慢慢地進行調試,以找出它正確顯示所有10行的問題。我懷疑它一定是代碼中的內存問題,因爲我從Web上獲取圖像,我覺得它需要大量內存。添加到佈局後,我嘗試釋放視圖內存,但它始終崩潰。
請讓我知道我做錯了。如何避免android中的內存泄漏

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

+0

什麼是堆棧跟蹤? – Mudassir

+0

你如何得到parsedExampleDataSet?它不是在單獨的線程中分析嗎?你是否試圖打印它的大小? – ania

+0

@ania :: no在同一個線程中解析它。我力圖打印大小()。現在就做。謝謝 – Prathima

回答

0

如果要加載不是使用的ListView多行。

它處理所有內存問題並比TableLayout更好。

here就是一個很好的例子。

+0

謝謝!我是android新手。最初我試圖使用列表視圖來實現這一點,但我無法正確理解這個概念。這就是爲什麼我選擇了tablelayout – Prathima

0

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

  • 當你運行該程序,for(;;)循環迭代只有4次

  • 當您運行調試器和手動步進,它迭代10次,這是根據您的期望

如何填充parsedExampleDataSet.getApp NameString()?它的大小被用作for(;;)循環的上限,並且似乎隨時間變化。如果它被一個異步進程(一個線程)填充,這將解釋這個問題。

隨意添加更多的細節,讓我知道。我會進一步編輯/詳細說明您將帶來的新元素。