如何创建AsyncTask供全球使用?

时间:2015-07-30 07:00:03

标签: android android-asynctask

我想在两个以上的活动中使用相同的AsyncTask。在每个活动中编写相同的代码并不实用。我的问题是,

如何使用AsyncTask GLOBALLY创建类并在任何地方使用它?

我的第二个重要问题是:

如何从onPostExecution()获取每个活动的返回值?

2 个答案:

答案 0 :(得分:0)

从任何可以使用otto的地方运行asynctask:

如果你正在使用android studio,你可以添加它作为jar下载它的依赖项或eclipse:参考这个链接:http://square.github.io/otto/

首先你声明单音:

public class MyBus {

private static final Bus BUS = new Bus();

public static Bus getInstance() {
return BUS;
 }
}

然后创建一个单独的asynctask类:

public class MyAsyncTask extends AsyncTask<Void, Void, String> {

@Override protected String doInBackground(Void... params) {
Random random = new Random();
final long sleep = random.nextInt(10);
try {
  Thread.sleep(sleep * 1000);
} catch (InterruptedException e) {
  e.printStackTrace();
}
return "Slept for " + sleep + " seconds";
}

@Override protected void onPostExecute(String result) {
MyBus.getInstance().post(new AsyncTaskResultEvent(result));
 }
}

然后从活动内部:注册总线并调用新的MyAsyncTask()。execute();

不要忘记在销毁时取消注册公共汽车:

请参阅本教程以获取更多帮助:http://simonvt.net/2014/04/17/asynctask-is-bad-and-you-should-feel-bad/

答案 1 :(得分:0)

public class MyAsyncTask extends AsyncTask<Void, Void, String> {
    private OnResultReceived mListner;
    public MyAsyncTask(OnResultReceived listner){
        this.mListner=listner;  
    }       
    @Override protected String doInBackground(Void... params) {
            //DO YOUR STUFF
        String data="Test";     
        return data;
        }

    @Override protected void onPostExecute(String result) {
        if(mListner!=null)mListner.onResult(result);
    }

public interface OnResultReceived{
    public void onResult(String result);
}       
}

在活动中

new MyAsyncTask(new OnResultReceived{
    public void onResult(String data){
        //Your Result from AsyncTask    
    }
}).execute();