我想在两个以上的活动中使用相同的AsyncTask。在每个活动中编写相同的代码并不实用。我的问题是,
如何使用AsyncTask GLOBALLY创建类并在任何地方使用它?
我的第二个重要问题是:
如何从onPostExecution()获取每个活动的返回值?
答案 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();