关于AsyncTask的一些总结

     //实现异步的内部类

    /**
     * 第一个参数:String 
     * 传入:在调用该类对象时传入的参数
     * 如:MyTask myTask=new MyTask(Context) myTask.execute(string)
     * 调用:doInBackground(String... strings)
     * strings是这个参数,通常用strings[0]使用
     * 
     * 第二个参数:Integer 更新进度的参数 
     * 传入:调用publishProgress(int);传入
     * 调用:onProgressUpdate(Integer... values)调用
     * values是这个参数,values[0]使用
     * 
     * 第三个参数:外部线程doInBackground(String... strings)执行的结果,是        这个方法的返回值
     * 传入:给doInBackground()设置的返回值就是这个参数
     * 调用:onPostExecute(String s)调用
     * s 是这个参数
     */
    class  MyTask  extends AsyncTask< String, Integer, String > {
        private Context context;
        ProgressDialog pdialog;
        /**
        构造方法
        可以在这初始化一些变量
        */
        public MyTask(Context context){
            this.context=context;
        }
        /**
         该方法将在执行实际的后台操作前被UI thread调用。
         可以在该方法中做一些准备工作,如在界面上显示一个进度条
         */
        protected void onPreExecute() {
            pdialog=new  ProgressDialog(context, 0);
            super.onPreExecute();
        }

        /**
        该方法运行在后台线程中。
        这里将主要负责执行那些很耗时的后台计算工作。
        可以调用 publishProgress方法来更新实时的任务进度。
        该方法是抽象方法,子类必须实现。
        */
        protected String doInBackground(String... strings) {
            for(int i=0;i<100;i++){
                try {
                    //publishProgress这个方法
                    //会获取实时进度传递给onProgressUpdate
                    publishProgress(i);
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }

            return null;
        }
        /**
        在publishProgress方法被调用后,
        UI thread将调用这个方法从而在界面上展示任务的进展情况,
        例如通过一个进度条进行展示。
         */
        protected   void  onProgressUpdate(Integer... values) {
            pdialog.setProgress(values[0]);//在这里更新进度条
        }

       /**
       在doInBackground 执行完成后,
       onPostExecute 方法将被UI thread调用,
       后台的计算结果将通过该方法传递到UI thread.
       */
        protected void onPostExecute(String s) {
            //显示结果的地方
            super.onPostExecute(s);
        }
    }

运行顺序:从上到下

onPreExecute() 

doInBackground(String... strings) 

onProgressUpdate(Integer... values) //在publishProgress方法被调用后才调用

onPostExecute(String s)

你可能感兴趣的:(关于AsyncTask的一些总结)