码迷,mamicode.com
首页 > 移动开发 > 详细

android 的异步任务

时间:2015-05-16 00:04:15      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:

/**
 * 异步任务的三个泛型参数:
 * 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;
        }
    }
}

  

android 的异步任务

标签:

原文地址:http://www.cnblogs.com/zhengqun/p/4507111.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!