AsyncTask完成后,Android内存不断增长

时间:2016-02-24 16:21:52

标签: android android-fragments memory-leaks android-asynctask garbage-collection

我有一个内部AsyncTask类,可以从ArrayList方法上的数据库中下载大doInBackground(),并在onPostExecute()上初始化一个arrayAdapter,以显示数据ListViewAsyncTask来自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);
        }

    }
}

0 个答案:

没有答案