如何将Button CallBack Action传递给AsyncTask类?

时间:2016-04-20 09:48:50

标签: android android-asynctask

我正在尝试将按钮的回调操作从主活动传递到AsyncTask类。现在我只是在AsyncTask类的构造函数中传递Button,我直接在那里执行:

public AsyncTaskClass(Button btnOk){
    this.btnOk = btnOk;
}

@Override
protected void onPreExecute() {
    btnOk.setOnClickListener(btnOkListener);
    Log.i("AsyncTask", "onPreExecute");
}

private View.OnClickListener btnOkListener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //things to do
    }
};

@Override
protected Boolean doInBackground(Void... params) { //etc

这是好习惯吗?有没有更好的方法,可能通过使用外部CallBack接口?如果是这样,怎么做?谢谢你的时间!

1 个答案:

答案 0 :(得分:0)

您永远不会将视图,片段,活动等作为参数传递给线程。 Android的生命周期可以让你看到与任何UI容器无关的令人讨厌的惊喜,例如视图实例,因为它已被堆栈中的其他容器替换。无论如何,来自click事件的回调将始终到达UI线程。因此,要么从onClick()启动asynch任务,这很简单。或者,如果在您的情况下,任务已经存在,您可以从onClick()调用它。但Asynch任务永远不应该知道有一个按钮!

pushd

而不是同步你可以使用AtomicBoolen,这是更干净的方式。