当前位置:操作系统 > 安卓/Android >>

Android异步操作AsyncTask

前面一篇是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");
    }
}

作者“啊迪”
 

补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,