如何在Android中使AsyncTask模块化

我对Android开发很陌生。 我正在一个应用程序,我需要做很多asynchronous调用API。 对于每个API调用,我都必须一遍又一遍地编写类似的AsyncTask类。 那么,有没有办法使这些asynchronous调用模块化?

Related of "如何在Android中使AsyncTask模块化"

是的,这是可能的使用Listener和AsyncTask与参数化的构造函数

核实

创build一个界面

public interface OnTaskCompletListerner { void oncompleteListerner(String name); } 

按如下所示创build一个AsyncTask类

 public class AsyncTaskModuler extends AsyncTask<Void, Void, String> { private Context context; private HashMap<String, String> data; private String URL; private OnTaskCompletListerner taskdone; public AsyncTaskModuler(Context ctx,HashMap<String, String> data,String url,OnTaskCompletListerner taskdone){ this.context=ctx; this.data=data; this.URL=url; this.taskdone=taskdone; } @Override protected String doInBackground(Void... params) { //Do the task here and return the value if needed return null; } @Override protected void onPostExecute(String result) { taskdone.oncompleteListerner(result); } 

并在你的活动中这样称呼它

 public class CallAync extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); String url=""; HashMap<String, String> data=new HashMap<String, String>(); AsyncTaskModuler moduler=new AsyncTaskModuler(CallAync.this, data, url, completListerner); moduler.execute(); } OnTaskCompletListerner completListerner=new OnTaskCompletListerner() { @Override public void oncompleteListerner(String name) { } }; } 

创build一个通用的asynchronous任务,并将您的url作为parameter passing给它。因此,您可以对所有的API调用重复使用相同的asynchronous任务

 public class myTask extends AsyncTask<Void, Void, Void> { String muUrl; public myTask(Context context, Activity activity, String url) { contxt = context; myUrl=url; } @Override protected Void doInBackground(Void... params) { makeApiCalls(); return null; } } 

以下面的方式启动任务:

 new myTask(this, this, urlStr).execute(); 

编辑

我怎样才能执行不同的逻辑onPostExecute()?

您可以在myTask的构造函数中添加另一个参数。 防爆。

  public MyTask(Context context, Activity activity, String url,String postExecuteAction) { } 

在你的文章执行只是检查每个案件,如果其他,并执行相应的任务

虚拟背景类

  private class BackGroundClass extends AsyncTask<String, Void, Bitmap> //<arg to do InBackground,,returntype of do inBackground and arg of onPostExecut> { public BackGroundClass() { } @Override protected void onPreExecute() //forground work in UI thread prior to doInbackground { super.onPreExecute(); } @Override protected Bitmap doInBackground(String... urls) //background work in parallel thread { Bitmap b=null; // your background work return b; } @Override protected void onPostExecute(Bitmap result) //forground work in UI thread post to doInbackground { super.onPostExecute(result); if(result!=null) { //use bitmap image in result } else { //Image is not available } } } 

要求一个平行的执行

 new BackGroundClass().execute(StringArg1,stringArg2,StringArg3); 

调用多个parellel执行

当tou需要同时调用多个后台任务时

 new BackGroundClass().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,StringArg1,stringArg2,StringArg3); 

从单一活动调用

使用这个作为你的活动的内部类,如果不是从多个活动中调用,就很容易分享variables

从多个活动调用

使用构造函数来传递活动上下文和其他variables

 new BackGroundClass(constructor arguments).execute(StringArg1,stringArg2,StringArg3); new BackGroundClass(constructor arguments).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,StringArg1,stringArg2,StringArg3);