就目前而言,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
}
}
还有其他办法吗?或者,有一种更好的方法可以在后台完成的工作完成后等待处理事情吗?
答案 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
}
}
与其他任务类型类似。