【发布时间】:2017-07-01 21:16:49
【问题描述】:
您好,我对 android 编程还是比较陌生,最近偶然发现了一个关于 AsyncTasks 的相当抽象的问题。
据我了解,在 AsyncTask 执行 runInBackground 之后,它会向 onPostExecute 返回一个值,并在其中执行 UI 线程处理结果。现在,如果我想对从 runInBackground 返回的结果做不同的事情怎么办。我见过这样的建议示例(取自here):
private class MyCustomAsyncTask extends AsyncTask<Void, Void, Void>{
private boolean mShouldCallMethod1;
public MyCustomAsyncTask(boolean shouldCallMethod1){
mShouldCallMethod1 = shouldCallMethod1;
}
@Override
protected Void doInBackground(Void... params) {
//code goes here..
return null;
}
@Override
protected void onPostExecute(Void result) {
if(mShouldCallMethod1){
method1();
}else{
method2();
}
}
}
但是如果我想要 onPostExecute 应该做的多于两件事(例如 method3、method4 等等?当然,我可以实现一个 switch 和一些 int 变量来确定调用什么方法等,但这似乎很愚蠢和多余。不管目的如何,函数返回结果的模型对我来说似乎很直接。但是在 AsyncTask 中,似乎我必须指定一个目的。我想知道是否有AsyncTask 可以实现类似函数的方式。
例如,我有一个使用 URL 获取图像的 AsyncTask。此图像可用于填充ImageView,也可保存到图库中。所以他们在runInBackground 中基本上做了同样的事情,但他们的结果需要以不同的方式处理。
我还是个初学者,如果我错过了一些简单的细节/概念,我深表歉意。 提前谢谢你。
【问题讨论】:
-
如果他们做不同的事情,你应该写不同的异步任务
-
@cricket_007 感谢您的回复。是的,我考虑过这一点,但这意味着我必须一遍又一遍地写一堆相同的东西,这似乎也是多余的。不过,如果没有其他办法,那就不得不这样做了。
-
答案实际上取决于您要实现的目标,并且提供的代码示例过于随意。 AsyncTask 将提供哪些数据作为参数
onPostExecute?我假设它将属于同一类型,那么它的处理方式需要改变什么? -
@PPartisan 感谢您的回复。我为歧义道歉。是的,
onPostExecute得到的数据是同一类型的。我没有任何具体的代码示例,但我会在原始问题中提供一个简单的示例。 -
已经停止使用 AsyncTasks :trollface:。还有更好的选择
标签: java android android-asynctask