AsyncTask

  首先继承一下此类,实现以下若干方法:

  1)onPreExecute(),该方法将在执行实际的后台操作前被UI thread调用。可以在该方法中做一些准备工作,如在界面上显示一个进度条。

  2)doInBackground(Params...),将在onPreExecute 方法执行后马上执行,该方法运行在后台线程中。这里将主要负责执行那些很耗时的后台计算工作。

  可以调用publishProgress方法来更新实时的任务进度。该方法是抽象方法,子类必须实现。

  3)onProgressUpdate(Progress...),在publishProgress方法被调用后,UI thread将调用这个方法从而在界面上展示任务的进展情况,例如通过一个进度条进行展示。

  4)onPostExecute(Result),在doInBackground 执行完成后,onPostExecute 方法将被UI thread调用,后台的计算结果将通过该方法传递到UI thread.

  使用时需要遵循以下规则:

  1)Task的实例必须在UI thread中创建

  2)execute方法必须在UI thread中调用

  3)不要手动的调用这些方法,只调用execute即可

  4)该task只能被执行一次,否则多次调用时将会出现异常

  示例如下:

public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);

       editText = (EditText) findViewById(R.id.weather_city_edit);
       Button button = (Button) findViewById(R.id.goQuery);
       button.setOnClickListener(this);
}

public void onClick(View v) {
       new GetWeatherTask().execute(“aaa”);
}

class GetWeatherTask extends AsyncTask⁢<String, Integer, String> {
    protected String doInBackground(String... params) {
         return getWetherByCity(params[0]);
    }
    protected void onPostExecute(String result) {
         setTitle(result);
    }
}