如何实现AsyncTask模式以避免过于冗长的代码

时间:2014-03-05 20:18:13

标签: android android-asynctask

我正在实施一个使用许多方法的应用程序,这些方法需要AsyncTask一个等待对话框。 实际上我的方法是每次使用扩展AsyncTask的内部类

类似

 private class AsyncOperation extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute(){
            pDialog = new ProgressDialog(CurrencyConverterActivity.this);
            pDialog.setMessage("Waiting...");
            pDialog.show();
        }
        @Override
        protected Void doInBackground(Void... params) {
           ...
          return null
         }

        protected void onPostExecute(Void params){
            pDialog.dismiss();
            runOnUiThread(new Runnable() {
                public void run() {
                    //dialogs according status the                     
                    //int status is a static variable declared in external class
                }

            });


        }

因为使用这种方法我必须编写这个内部类太多次了,这导致脏代码不能很好地读取,我正在寻找更智能的解决方案

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

每次使用异步任务时,您是否在呼叫同一网络? 如果是,那么您可以使用一个扩展异步的类并传递每个调用的值。您可以使用响应侦听器从名为async

的方法获取响应

这样的事情:

MainActivity:
First method:
AsyncOperation asyncCall = new AsyncOperation(MainActivity.this, "abc", "bcd");
asyncCall.execute();

Second method:
AsyncOperation asyncCall = new AsyncOperation(MainActivity.this, "aaa", "bbb");
asyncCall.execute();

callback(…){

}


Async Class:
 private class AsyncOperation extends AsyncTask<Void, Void, Void> {

      AsyncOperation(listener, string, string)
{

}

        @Override
        protected void onPreExecute(){
            pDialog = new ProgressDialog(CurrencyConverterActivity.this);
            pDialog.setMessage("Waiting...");
            pDialog.show();
        }
        @Override
        protected Void doInBackground(Void... params) {
           ...
          return null
         }

        protected void onPostExecute(Void params){
            pDialog.dismiss();
            listener.callback(…);


        }

答案 1 :(得分:0)

您可以在单独的文件(而不是内部类)中创建AsyncTask并重复使用多次。 AsyncTask不一定是内部阶级。

如果需要,您可能需要修改AsyncTask以获取其他参数,以使其可重复使用。

您还可以为AsyncTask创建一个构造函数,其中包含您需要传递给它的值的参数,并使用该构造函数来实例化AsyncTask

如果在不同位置使用AsyncTasks的方式相同或至少相似,则此方法有意义。如果在每个AsyncTask中使用完全不同的代码,那么使用单独的AsyncTasks会更好(尽管您仍然可以将它们从内部类中提取到单独的类中)。