我正在尝试将按钮的回调操作从主活动传递到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接口?如果是这样,怎么做?谢谢你的时间!
答案 0 :(得分:0)
您永远不会将视图,片段,活动等作为参数传递给线程。 Android的生命周期可以让你看到与任何UI容器无关的令人讨厌的惊喜,例如视图实例,因为它已被堆栈中的其他容器替换。无论如何,来自click事件的回调将始终到达UI线程。因此,要么从onClick()启动asynch任务,这很简单。或者,如果在您的情况下,任务已经存在,您可以从onClick()调用它。但Asynch任务永远不应该知道有一个按钮!
pushd
而不是同步你可以使用AtomicBoolen,这是更干净的方式。