多次使用的常见异步任务

时间:2014-07-08 11:46:10

标签: android android-activity android-asynctask

我们可以为多次使用创建一个常见的异步任务吗?如果是,请告诉我,实际上我是Android新手。请解释我们如何才能这样做。?

谢谢。

2 个答案:

答案 0 :(得分:1)

  

我们可以为多次使用创建一个常见的asynck任务吗?

  • 您应该为每次通话创建一个新的AsncTask。

AsyncTask个实例只能使用一次。

相反,只需将您的任务称为new MyAsyncTask().execute("");

即可

线程规则

  • AsyncTask的目标是处理线程管理 你和你不应该担心线程机制。

  • Android平台处理线程池来管理 异步操作。 AsyncTasks就像消耗品。

  • 该任务只能执行一次(如果一秒钟将抛出异常 尝试执行。)

来源:should-you-create-new-async-tasks-for-every-different-call-or-use-the-same-one

  

通过使用通用的Asynck任务,我们可以将多个asynck任务用于多个任务   目的..?

  • 是的,你可以创建一个回调接口,只是声明你的方法来完成任务。 在其他类中实现该方法,然后将该方法与您想要的任何结果一起使用 发送给那个方法。

查看此帖子 - common-class-for-asynctask-in-android

答案 1 :(得分:1)

  

我们可以为多次使用创建一个常见的asynck任务吗?

这取决于您要执行的任务类型。如果你想:

  • 执行类似的任务类型
  • 提供相对类似的结果

然后你应该使用一个共同的AsyncTask类。

如果结果和功能不同,则应为此类呼叫创建新的AsyncTask

例如,我需要调用Web服务以获取JSON中的结果,然后创建了一个公共类(extends AsyncTask),它将目标URL作为参数并返回JSONObject

这是代码

CallService.java

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);
    }

}

ServiceCallback.java

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");