得到一个小问题,并希望得到一些建议。
这是我的异步任务
public class DummyTask extends AsyncTask<Void, Void, Void> {
private OnDummyTaskComplete mOnDummyTaskComplete;
public DummyTask(OnDummyTaskComplete listener) {
mOnDummyTaskComplete = listener;
}
@Override
protected Void doInBackground(Void... params) {
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
mOnDummyTaskComplete.onDummyTaskComplete();
}
}
这是我的回调
public interface OnDummyTaskComplete {
void onDummyTaskComplete();
}
这是实现回调的活动启动异步任务。
public class MainActivity extends ActionBarActivity implements OnDummyTaskComplete {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DummyTask dummyTask = new DummyTask(this);
dummyTask.execute();
}
我是否需要处理回调以避免内存泄漏? 是否需要以下代码?
@Override
protected void onPostExecute(Void aVoid) {
mOnDummyTaskComplete.onDummyTaskComplete();
mOnDummyTaskComplete = null;
}
答案 0 :(得分:0)
我是否需要处理回调以避免内存泄漏?
没有。运行onPostExecute()
后不久,AsyncTask
实例将丢失范围,并引用mOnDummyTaskComplete
。请务必不要在mOnDummyTaskComplete
内引用MainActivity
(或其他可能包含对doInBackground
的引用的内容);否则,你会打开Context
泄漏。有关详细信息,请参阅this相关SO问题。