通常,我们把
AsyncTask
放在同一个类中,以使它更清晰地被同一活动使用。
如果您希望
AsyncTask
能够被多个活动重复使用,则可以简单地创建一个独立的类,并通过构造函数从活动中传递参数。
您可以在您的AsyncTask中创建一个接口,用于将AsyncTask的响应发送到您的活动中,如下所示,并在需要时调用您的监听器方法。我已经称之为
onPostExecute()
:
public class DeckDownloader extends AsyncTask<Void, Void, String> {
OnDownloadUpdateListener listener;
public interface OnDownloadUpdateListener {
public void OnDownloadDeckFinish(String Response);
}
public DeckDownloader(Context ctx, OnDownloadUpdateListener listener) {
mContext = ctx;
this.listener = listener;
}
@Override
protected String doInBackground(Void... params) {
String str = "downloading";
return str;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void onPostExecute(String result) {
if( listener != null ) {
listener.OnDownloadDeckProgress(result);
}
}
}
而在您的Activity类中,您需要实现该侦听器并编写代码以在该实现方法中更新textview:
public class myActivity extends Activity{
private DeckDownloader.OnDownloadUpdateListener downloadListener;
TextView txtAsyncResponse;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
txtAsyncResponse = (TextView) findViewById(R.id.txtAsyncResponse);
downloadListener = new DeckDownloader.OnDownloadUpdateListener() {
@Override
public void OnDownloadDeckFinish(String Response) {
txtAsyncResponse.setText(Response);
}
};
}
您可以编写以下代码在您的活动中启动AsyncTask,每当需要时,例如按钮单击事件或其他情况
DeckDownloader mTask = new DeckDownloader(this.getApplicationContext(), downloadListener);
mTask.execute();
这可能是您想要的东西!