处理UI的Android Async Task

时间:2011-07-07 19:31:12

标签: android android-layout progressdialog

我是Android开发的新手。我想完成一项描述如下的任务:

  • 一个主要的活动,它通过请求Web服务并启动AsyncTask来调用外部类(另一个类将扩展xml)来解析json并接收ProgressDialog
  • 该类在其xml方法中执行jsondoInBackground解析。
  • 解析完成后,在onPostExecute方法中,关闭在主活动中设置的ProgressDialog
  • 我可以通过将ProgressDialog对象传递给解析类并在其onPostExecute方法中解除相同的对象来实现此目的。

我认为传递一个UI对象的实例作为参数不是一个很好的程序方法,我希望必须有其他一些方法来解决。

请建议。 谢谢

2 个答案:

答案 0 :(得分:4)

解耦这些问题的最简单方法是使用界面:

  1. 使用单一方法定义回叫接口(让我们称之为WorkDoneListener):workDone()
  2. 声明您的活动类以实施WorkDoneListener并实施workDone()以关闭对话框。
  3. 定义AsyncTask的构造函数以接受WorkDoneListener。将引用存储在成员字段中。
  4. onPostExecute中,调用侦听器的workDone()方法。

答案 1 :(得分:1)

如果你的AsyncTask太大而你想在其他文件中声明它,你应该怎么做。但是,请记住,通常您在UI类中声明AsyncTask

public class YourActivity extends Activity{
    private class YourAsyncTask extends AsynkTask<etc.>{
    }
}

事实上,如果您仅使用该AsyncTask来自该活动(我的意思是,如果您未在其他任何地方使用它),则将AsyncTask声明为内部类是一个很好的设计实践