在AsyncTask中调用方法?

时间:2015-11-05 18:28:09

标签: java android asynchronous android-asynctask

如果我在 AsyncTask [1] vs 中调用方法,如果我直接在其中编写代码[2],有什么区别?如果我在 AsyncTask 中写下我的所有代码,那么它真的很混乱。我想创建单独的方法来执行此操作,甚至可以创建单独的类。

[1]:

public class MyAsyncTask extends AsyncTask < Void, Void, String > {
  @Override
  protected String doInBackground(Void...params) {
    loadXML();
  }
  @Override
  protected void onPostExecute(String result) {
    setValues();
  }
}

public void loadXML() {
  //loadsXML
}
public void setValues() {
  //Sets values to textViews
}

[2]:

public class MyAsyncTask extends AsyncTask < Void, Void, String > {
  @Override
  protected String doInBackground(Void...params) {
    //Load XML from web
  }
  @Override
  protected void onPostExecute(String result) {
    //Set TextView from result obtained in doInBackground
  }
}

3 个答案:

答案 0 :(得分:0)

没有区别,因为代码将在同一个线程中运行。觉得按你的意愿写。

答案 1 :(得分:0)

本身没有任何问题,但请记住,这些方法仍然在AsyncTask的线程上运行。因此,例如,如果要修改UI线程,则仍应使用publishProgress / onProgressUpdate(这意味着您需要对AsyncTask实例的引用)。

答案 2 :(得分:0)

没有区别,但是......

使用[1]方法,程序变得更加模块化,并遵循面向对象的原则。

如果你想在其中包含更多方法,使用[2]方法会变得更加笨拙。

和我个人可能更喜欢做的第三种方法[3]是在单独的类loadXML()中公开XMLLoader方法来封装xml解析和加载的复杂性,并在{AsyncTask中使用此类{1}}加载XML。

同样setValues()可以在我的android活动视图中公开,该视图应作为参数传递给AsyncTask。

请注意,还有其他方法可以采用模块化方式解决此问题。