Im using AsyncTask, называемый GetSalesTask, как внутренний класс в моей деятельности, но кажется, что он протекает, я вижу много экземпляров, живых из одного и того же класса GetSalesTask, другими словами кажется, что экземпляры GetSalesTask живы и не очищаются из памяти. Не могли бы вы указать, где моя проблема?утечка памяти с использованием AsyncTask как внутреннего класса
class LeekClass extends BaseProfileActivity{
void callTask()
{
new GetSaleTask().execute();
}
private class GetSalesTask extends AsyncTask<Void, Void, Boolean> {
@Override
protected void onPreExecute() {
showList(true);
super.onPreExecute();
}
@Override
protected Boolean doInBackground(Void... params) {
List<Sale> saleList = get Data From Database
mItems.clear();
mItems.addAll(saleList);
if (saleList.size() > 0)
return true;
else
return false;
return false;
}
@Override
protected void onPostExecute(Boolean result) {
BaseProfileActivity baseAct = (BaseProfileActivity) getActivity();
if (baseAct != null && getView() != null && mAdapter != null) {
mAdapter.notifyDataSetChanged();
showList(true);
baseAct.getProgress().setVisibility(View.GONE);
}
}
}
}
Методы showList (true); GetView(); и переменные mItems, mAdapter определены в активности.
Вы должны ознакомиться с http://simonvt.net/2014/04/17/asynctask-is-bad-and-you-should-feel-bad/. Вы сохраняете ссылку на свою деятельность, означающую, что она не получит GC'ed до вашей активности. – zgc7009
@ zgc7009, хорошая ссылка! – mapodev