android - memoryleak in gridview using base adapter and viewholder method -
i using extended baseadapter gridview in implement viewholder methods. pass data cursor adapter.
here getview()
public view getview(int position, view view, viewgroup parent) { // inflate layout each item of listview viewholder holder; if (view == null) { view = inflater.inflate(griditemid, null); log.d("recyvleview", "inflating " + position); holder = new viewholder(); holder.tvattachment = (imageview) view.findviewbyid(r.id.iv_inventory_products_griditems_attachment); holder.imagecount = (textview) view.findviewbyid(r.id.imagecount); holder.tvitemcode = (textview) view.findviewbyid(r.id.tv_inventory_products_griditems_itemcode); holder.tvproductname = (textview) view.findviewbyid(r.id.tv_inventory_products_griditems_title); holder.tvprice = (rialtextview) view.findviewbyid(r.id.tv_inventory_products_griditems_price); holder.tvremain = (textview) view.findviewbyid( r.id.tv_inventory_products_griditems_remain); holder.btnmore =(com.rey.material.widget.button) view.findviewbyid(r.id.btn_inventory_products_griditems_more); holder.btnplus = (com.rey.material.widget.button) view.findviewbyid(r.id.btn_inventory_products_griditems_addone); view.settag(holder); } else { log.d("recyvleview", "restoring " + position); holder = (viewholder) view.gettag(); } setupview(view, position,holder); //setupgridview(view,holder); return view; } i noticed have huge memory leak in tried minimize find leak, commented of methods , here has been left setupview:
private void setupview(view view, int position, viewholder holder) { // move cursor required position cursor.movetoposition(position); log.d("position", string.valueof(position)); //holder.itemid = cursor.getstring(cursor.getcolumnindex(databasecolumncontent.col_product_item_id.tostring())); //tsimpleproduct tempproduct = productcatalog.getsimpleproductbyid(integer.parseint(holder.itemid)); //holder.itemguid = cursor.getstring(cursor.getcolumnindex(databasecolumncontent.col_product_guid.tostring())); holder.tvitemcode.settext(cursor.getstring(cursor.getcolumnindex(databasecolumncontent.col_product_itemcode.tostring()))); holder.tvproductname.settext(cursor.getstring(cursor.getcolumnindex(databasecolumncontent.col_product_itemdesc.tostring()))); /* //remain if (cybersetting.getsettingvalue(tcybersettingkey.showitemremain).equals("1")) { texttemp = (mcontext.getstring(r.string.restrictedinfo)); } else { if (tempproduct.getdefaultunitvalue() == 2 && tempproduct.isunitdependent()) { string titleremain2 = databasecolumncontent.col_product_cursor_remain2.tostring(); texttemp = cursor.getstring(cursor.getcolumnindex(titleremain2)); } if (cybersetting.getsettingvalue(tcybersettingkey.showitemremain).equals("2")) { if (texttemp == null) { texttemp = "0"; } int t = integer.parseint(texttemp); if (t > 0) { texttemp = mcontext.getstring(r.string.productavailable); } else { texttemp = mcontext.getstring(r.string.productunavailable); } } } holder.tvremain.settext(texttemp); //price string pricelevel = "0"; try { register register = register.getinstance(); pricelevel = register.getpricelevel(); } catch (nodaosetexception e) { e.printstacktrace(); } if(!pricelevel.equals("0")) texttemp = cursor.getstring(cursor.getcolumnindex(pricelevel)); else texttemp = "0.0"; if (tempproduct.getdefaultunitvalue() == 2 && tempproduct.isunitdependent()) { double price2; price2 = tlineitem.convertprice1toprice2(double.parsedouble(texttemp), tempproduct.isunit1bigger(), tempproduct.getunitcoef()); texttemp = tgeneraltools.convertdoubletoenglishstring(price2); if (tempproduct.getunitdesc2() != null && !tempproduct.getunitdesc2().equals("")) unitdesc = " (" + tempproduct.getcompleteunitdesc2() + ")"; } else { if (tempproduct.getunitdesc1() != null && !tempproduct.getunitdesc1().equals("")) unitdesc = " (" + tempproduct.getcompleteunitdesc1() + ")"; } holder.pricedef = texttemp; holder.tvprice.settext(texttemp + unitdesc); holder.tvremain.settext(holder.tvremain.gettext() + unitdesc); //image picturecatalog = tpicturecatalog.getinstance(); string defguid = ""; if (tempproduct.gethasattachcontent() >= 1 && picturecatalog.isdownloadedalbumavailable()) { defguid = picturecatalog.getdefaultpictureguid(holder.itemguid); if (tempproduct.gethasattachcontent() == 1) { holder.imagecount.setvisibility(view.gone); } else { holder.imagecount.setvisibility(view.visible); holder.imagecount.settext(string.valueof(tempproduct.gethasattachcontent())); } } else { holder.imagecount.setvisibility(view.gone); } string filename = environment.getexternalstoragedirectory().getpath() + fileaddresscontent.application_home_directory + fileaddresscontent.pictures_root_directory //+ fileaddresscontent.pictures_thumbs_directory.tostring() + defguid + fileaddresscontent.pictures_extension; pic = new file(filename); if (pic.exists()) picasso.with(mcontext) .load(pic) .error(r.drawable.noimage) //.placeholder(r.drawable.loading) .resize(thumbsize, thumbsize) .centerinside() .into(holder.tvattachment); else picasso.with(mcontext) .load(r.drawable.noimage) .resize(thumbsize, thumbsize) .centerinside() .into(holder.tvattachment); holder.tvattachment.setminimumheight(thumbsize); view.settag(holder);*/ } even though of commented, these 2 lines still leaking, know cause when commented them out, no leak there ... !
holder.tvitemcode.settext(cursor.getstring(cursor.getcolumnindex(databasecolumncontent.col_product_itemcode.tostring()))); holder.tvproductname.settext(cursor.getstring(cursor.getcolumnindex(databasecolumncontent.col_product_itemdesc.tostring()))); also holder class :
public class viewholder { public imageview tvattachment; public imageview ivstatus; public textview imagecount; public textview tvitemcode; public textview tvproductname; public textview tvremain; public rialtextview tvprice; public string pricedef; public string itemid; public string itemguid; public button btnmore; public button btnplus; } any suggestion, please ?! how can stop leaking ?! in advance!
edit: same result using cursor adapter well.
why using baseadapter? android api has cursoradapter , cursorloader handles cursor stuff. looks doing wrong cursors , causes memory leaks.
Comments
Post a Comment