带有回调的Android外部异步任务,我是否需要处理回调?

时间:2015-04-25 16:44:35

标签: java android

得到一个小问题,并希望得到一些建议。

这是我的异步任务

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;
}

1 个答案:

答案 0 :(得分:0)

  

我是否需要处理回调以避免内存泄漏?

没有。运行onPostExecute()后不久,AsyncTask实例将丢失范围,并引用mOnDummyTaskComplete。请务必不要在mOnDummyTaskComplete内引用MainActivity(或其他可能包含对doInBackground的引用的内容);否则,你会打开Context泄漏。有关详细信息,请参阅this相关SO问题。