通常,我们将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";
//your async code goes here
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();
这可能是你想要的东西!