Android,Singleton AsyncTask

时间:2014-03-25 08:24:18

标签: android android-asynctask

是否有可能定义AsyncTask的单个实例,而不是在每个类中定义?

或者它是为每项活动单独定义的?

我有4-5个活动,每个活动都有不同的url请求,对于url的响应,我已经定义了一个单独的类,其中包含根据请求解析和填充对象的方法。

编辑:我上面犯了一个错误。实际上,我应该定义一个从AsyncTask扩展的单个类,还是在需要的每个Activity中定义一个私有类?

道歉,我有点困惑。

感谢。

4 个答案:

答案 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