android 的异步任务

/**
 * 异步任务的三个泛型参数:
 * 1、调用execute方法时传入的参数类型,输入参数
 * 2、progressUpdate的方法入参
 * 3、异步任务的返回结果类型 doInBackground的返回类型,doPostExecute的方法入参
 *
 * 使用异步任务的一些注意事项
 * 1、一个异步任务只能执行一次,多次执行的话,则会跑出异常
 * 2、必须在UI线程中创建异步任务示例
 * 3、必须在UI线程中调用execute方法
 */
public class AsyncTaskTest extends Activity {
    private TextView tv_show;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_async_task_test);

        //初始化视图控件
        tv_show = (TextView) findViewById(R.id.tv_show);
    }


    /**
     * 开始异步任务
     * @param view
     */
    public void startAsyncTask(View view) throws Exception {
        DownloadAsyncTask asyncTask = new DownloadAsyncTask(this);
        asyncTask.execute(new URL("http://baidu.com"));
    }

    public class DownloadAsyncTask extends AsyncTask<URL,Integer,Void>{
        private Context mContext;
        private ProgressDialog progressDialog = null;
        public DownloadAsyncTask(Context context){
            this.mContext = context;
        }
        /**
         * 开始执行后台任务前执行,
         * 一般做一些初始化工作,比如:初始化对话框
         */
        @Override
        protected void onPreExecute() {
            progressDialog = new ProgressDialog(mContext);
            progressDialog.setTitle("任务执行中");
            progressDialog.setMessage("任务正在执行中,请耐心等待....");
            //设置用户不能取消进度条对话框
            progressDialog.setCancelable(false);

            progressDialog.setMax(100);

            progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            progressDialog.show();
        }

        /**
         * 执行后台任务
         * @param params
         * @return
         */
        @Override
        protected Void doInBackground(URL... params) {
            int i = 1;
            for (; i < 100; i++) {
                try {
                    Thread.sleep(300);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                publishProgress(i);
            }
            return null;
        }

        /**
         * 更新进度信息
         * @param values
         */
        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);
            tv_show.setText(values[0] + "");
            progressDialog.setProgress(values[0]);
        }

        /**
         * 后台操作执行完后做一些操作
         * @param aVoid
         */
        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);

            progressDialog.dismiss();
            progressDialog = null;
        }
    }
}

  

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。