前面一篇是Thread+Handler更新UI操作, Android有提供一个相对轻量级的AsyncTask,主要用于一些简单的逻辑操作更新UI.
public class ProAT extends AsyncTask<String, Integer, String>{ /* * 第一个参数为doInBackground传入的参数, * 第二个参数为onProgressUpdate传入参数,由doInBackground内调用publishProgress(Interger)传值; * 第三个为doInBackground返回值和onPostExecute传入的参数。 */ @Override protected void onPreExecute() { //该方法将在执行实际的后台操作前被UI thread调用。可以在该方法中做一些准备工作,如在界面上转菊花提示 System.out.println("onPreExecute--->Task start"); super.onPreExecute(); } @Override protected String doInBackground(String... params) { //将在onPreExecute 方法执行后马上执行,该方法运行在后台线程中。 //这里将主要负责执行那些很耗时的后台计算工作。 System.out.println("doInBackground---->"); try { Thread.sleep(5000); //可以调用 publishProgress方法来更新实时的任务进度。该方法是抽象方法,子类必须实现。 publishProgress(1); } catch (InterruptedException e) { // TODO: handle exception e.printStackTrace(); } return "doInBackground"; } @Override protected void onProgressUpdate(Integer... values) { System.out.println("更新进度"+values[0]); //在publishProgress方法被调用后,UI thread将调用这个方法从而在界面上展示任务的进展情况,例如通过一个进度条进行展示。 super.onProgressUpdate(values); } @Override protected void onPostExecute(String result) { // 在doInBackground 执行完成后,onPostExecute 方法将被UI thread调用,后台的计算结果将通过该方法传递到UI thread //用于更新UI System.out.println("onPostExecute----->"+result); super.onPostExecute(result); } @Override protected void onCancelled() { //当用户取消操作时. super.onCancelled(); } }主线程调用
public class AsyncTaskActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ProAT pro = new ProAT(); //execute必须在主线程调用 pro.execute("url"); } }