是否有可能定义AsyncTask的单个实例,而不是在每个类中定义?
或者它是为每项活动单独定义的?
我有4-5个活动,每个活动都有不同的url请求,对于url的响应,我已经定义了一个单独的类,其中包含根据请求解析和填充对象的方法。
编辑:我上面犯了一个错误。实际上,我应该定义一个从AsyncTask扩展的单个类,还是在需要的每个Activity中定义一个私有类?道歉,我有点困惑。
感谢。
答案 0 :(得分:5)
不,因为AsyncTask
只能执行一次(如果尝试第二次执行则会抛出异常)。因此,每次要执行它时,都必须创建AsyncTask
的新实例。
答案 1 :(得分:5)
希望这可以帮助你:
public class MyAsynctask extends AsyncTask<String, Integer, Integer> {
@Override
protected Integer doInBackground(String... params) {
int i = 0;
for (int x = 0; x < 500; x++) {
i++;
}
return i;
}
@Override
protected void onPostExecute(Integer result) {
super.onPostExecute(result);
}
}
活动使用Asynctask:
public class MyAsyncUser extends Activity{
int result;
TextView view;
public void onCreate(android.os.Bundle savedInstanceState) {
view = new TextView(this);
new MyAsynctask(){
protected void onPostExecute(Integer result) {
view.setText("" + result);
}
}.execute("what to do");
}
}
因此,您可以定义一个Asynctask类并使用它,并在不同的位置为您的结果创建一些内容。
答案 2 :(得分:0)
亲爱的朋友,可以这样做,但不建议你这样做。如果您仍想实现它,那么创建一个BaseActivity类来实现AsyncTask并覆盖url函数。 但要记住的一件事:,不要忘记关闭,在切换活动期间暂停asynctask实例。
答案 3 :(得分:0)
Is there any possibility of defining a single instance of AsyncTask, rather than defining in every class ?
如果你唯一关心的是在单独的文件中定义它,那么YES
,这是可能的和有效的。
<强>缺点:强>
如果您尝试在那里显示进度对话框,则可能会泄漏活动上下文。
它可能会尝试回复不再存在的活动,因为用户可能已经进一步移动。
编辑:
如果您是Android开发的初学者,为了简单起见,我建议define a private class inside each Activity where required
。
如果您有经验,请尝试使用Fragment
进行异步操作here