zoukankan      html  css  js  c++  java
  • 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;
            }
        }
    }
    

      

  • 相关阅读:
    python的基础爬虫(利用requests和bs4)
    R语言时间序列中的时间设置
    PHP扩展开发(6)
    PHP扩展开发(5)
    kafka安装及Kafka-PHP扩展的使用
    brew 更换国内源(镜像)
    PHP扩展开发(4)
    PHP扩展开发(3)-config.m4
    PHP扩展开发(2)
    PHP扩展开发(1)-创建基础框架
  • 原文地址:https://www.cnblogs.com/zhengqun/p/4507111.html
Copyright © 2011-2022 走看看