有没有办法让AsyncTask更具可移植性?

时间:2014-12-23 06:33:36

标签: android android-asynctask

就目前而言,AsyncTask真的让我的代码变得混乱。我需要将它用于某些东西,并且doInBackground片段用于不同的代码片段。但是,onPostExecute会发生变化。

我不想将所有内容都提供给一个方法,例如:

function doThis(String tag) {

    new AsyncTask<String, Void, String>() {

    @Override
    protected String doInBackground(Void... params) {
        // Do that thing that needs to be done.
    }

    @Override
    onPostExecute(String message) {

        if (tag.equals("login")) {
          // Do large segment of logging in code.
        } else if (tag.equals("register")) {
          // Do other large segment of registering code
        } ... //and it goes on   
    }
}

还有其他办法吗?或者,有一种更好的方法可以在后台完成的工作完成后等待处理事情吗?

2 个答案:

答案 0 :(得分:1)

您可以创建一个扩展AsyncTask的单独类。然后创建一个您的活动可以实现的接口,并且可以在onPostExecute中调用其方法。但是,您需要将活动引用传递给此新类。

答案 1 :(得分:1)

一种方法:继承。

abstract class BaseTask extends AsyncTask<String, Void, String> {
    @Override
    protected String doInBackground(Void... params) {
        // Do that thing that needs to be done.
    }
}

...

class LoginTask extends BaseTask {
    @Override
    onPostExecute(String message) {
        // just the "login" part here
    }
}

与其他任务类型类似。