我们可以为多次使用创建一个常见的异步任务吗?如果是,请告诉我,实际上我是Android新手。请解释我们如何才能这样做。?
谢谢。
答案 0 :(得分:1)
我们可以为多次使用创建一个常见的asynck任务吗?
AsyncTask
个实例只能使用一次。
相反,只需将您的任务称为new MyAsyncTask().execute("");
AsyncTask的目标是处理线程管理 你和你不应该担心线程机制。
Android平台处理线程池来管理 异步操作。 AsyncTasks就像消耗品。
该任务只能执行一次(如果一秒钟将抛出异常 尝试执行。)
来源:should-you-create-new-async-tasks-for-every-different-call-or-use-the-same-one。
通过使用通用的Asynck任务,我们可以将多个asynck任务用于多个任务 目的..?
答案 1 :(得分:1)
我们可以为多次使用创建一个常见的asynck任务吗?
这取决于您要执行的任务类型。如果你想:
然后你应该使用一个共同的AsyncTask
类。
如果结果和功能不同,则应为此类呼叫创建新的AsyncTask
。
例如,我需要调用Web服务以获取JSON中的结果,然后创建了一个公共类(extends AsyncTask
),它将目标URL作为参数并返回JSONObject
。
这是代码
public class CallService extends AsyncTask<String, Void, String> {
Context context;
ServiceCallback callback;
ProgressDialog dialog;
List<BasicNameValuePair> data;
public CallService(Context context, ServiceCallback back,List<BasicNameValuePair> data) {
this.context = context;
this.callback = back;
this.data = data;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
if(dialog==null || !dialog.isShowing())
{
dialog = new ProgressDialog(context,AlertDialog.THEME_HOLO_LIGHT);
dialog.setMessage("Loading...");
dialog.setIndeterminate(true);
dialog.setCancelable(false);
dialog.show();
}
}
@Override
protected String doInBackground(String... params) {
return CommonClass.getJSONFromUrl(params[0], data);
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
if (dialog.isShowing())
dialog.dismiss();
callback.callbackCall(result);
}
}
public interface ServiceCallback {
public void callbackCall(String response);
}
现在当我必须拨打我使用的服务时:
public class Activity1 extends Activity implements ServiceCallback {
@Override
public void callbackCall(String response){
//process and upate data
}
}
如果您想在Activity中使用Common ServiceCallback
类,请记住您需要实现接口AsyncTask
。
现在这就是我调用AsyncTask的方法
List<BasicNameValuePair> values = new ArrayList<BasicNameValuePair>();
values.add(new BasicNameValuePair("value1",value1));
values.add(new BasicNameValuePair("value2",value2));
new CallService(Activity1.this, Activity1.this, values)
.execute("http://www.example.com/someservice");