我有一个内部AsyncTask
类,可以从ArrayList
方法上的数据库中下载大doInBackground()
,并在onPostExecute()
上初始化一个arrayAdapter,以显示数据ListView
。 AsyncTask
来自onCreateView()
的{{1}}函数。
一切都按预期工作正常,当我监视内存分配时,分配内存的数量在打开片段之前是不变的。
但是当片段被打开并且DialogFragment
显示所有内容后,分配的内存不断增长,GC_FOR_ALLOC被调用并保持增长。
即使我关闭片段,这也会继续发生。当我一次又一次打开片段时,内存分配率保持加倍。
如果我删除AsyncTask
并执行片段的AsyncTask
函数内的所有操作,则不会发生这种情况。然而,如果我这样做,UI往往没有响应,但内存问题不会存在。
请帮帮我。下面显示的是onCreateView()
我的代码
AsyncTask
上面的AsyncTask是我的Dialog Fragment中的内部类,并从onCreateView()
中调用如下所示public class GenerateItemsForBasketAsync extends AsyncTask<String, Integer, List<beTableSaleItem>> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected List<beTableSaleItem> doInBackground(String...params) {
if(bePOS.getInstance().getBasket().getOrderNo()!="-99")
{
return ORMLiteDBManager.getInstance().getAllTableSalesItemsForTableSale(params[0]);
}
else
{
return new ArrayList<>();
}
}
@Override
protected void onPostExecute(List<beTableSaleItem> result) {
super.onPostExecute(result);
basketItems = result;
if (basketItems.size() > 0) {
basketAdaptor = new BasketListAdaptor();
basketListView.setAdapter(basketAdaptor);
btnMakeOrder.setEnabled(true);
btnAddToBasket.setEnabled(true);
}
basketListView.setVisibility(View.VISIBLE);
loadingProgress.setVisibility(View.GONE);
btnBack.setEnabled(true);
btnCom.setEnabled(true);
beTableSale tableSale = ORMLiteDBManager.getInstance().getTableSaleForOrderNo(bePOS.getInstance().getBasket().getOrderNo());
if(!(tableSale!=null && tableSale.getWaiterOrderStatus().equals(Constant.STATUS_CHEQUE)))
{
btnMoveOrder.setEnabled(true);
}
}
}