如果我在 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
}
}
答案 0 :(得分:0)
没有区别,因为代码将在同一个线程中运行。觉得按你的意愿写。
答案 1 :(得分:0)
本身没有任何问题,但请记住,这些方法仍然在AsyncTask的线程上运行。因此,例如,如果要修改UI线程,则仍应使用publishProgress
/ onProgressUpdate
(这意味着您需要对AsyncTask实例的引用)。
答案 2 :(得分:0)
没有区别,但是......
使用[1]方法,程序变得更加模块化,并遵循面向对象的原则。
如果你想在其中包含更多方法,使用[2]方法会变得更加笨拙。
和我个人可能更喜欢做的第三种方法[3]是在单独的类loadXML()
中公开XMLLoader
方法来封装xml解析和加载的复杂性,并在{AsyncTask
中使用此类{1}}加载XML。
同样setValues()
可以在我的android活动视图中公开,该视图应作为参数传递给AsyncTask。
请注意,还有其他方法可以采用模块化方式解决此问题。