zoukankan      html  css  js  c++  java
  • 07 总结ProgressDialog 异步任务

    1,ProgressDialog
        >        //使用对象  设置标题
                progressDialog.setTitle("标题");
                //设置图标
                progressDialog.setIcon(R.drawable.ic_launcher);
                //设置展示的内容
                progressDialog.setMessage("正在下载请稍等....");
                //设置样式
                progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                //展示
                progressDialog.show();

                

    2,UI线程和工作线程

        >Ui线程也是Main线程  负责会在UI界面和事件分发

        俩个主要要素:
                >1,在Ui线程不能做阻塞操作  (在主线程阻塞超过5s程序出错  "程序无反应")
                >2,在主线程以外的线程(子线程)不能更新UI

    3, 什么是异步任务
        >在子线程做耗时操作  将结果回调到主线程

    4, 为什么要使用异步任务
        
        >1,在Ui线程不能做阻塞操作  (在主线程阻塞超过5s程序出错  "程序无反应")  4.0以后  不允许在主线程下载
        >2,在主线程以外的线程(子线程)不能更新UI


         * 1,创建一个类 继承AsyncTask,同时声明三个参数
         * Params:子线程执行方法里参数类型
         * Progress;子线程执行任务的进度类型 如果不想展示进度  Void
         * Result:子线程执行任务的结果类型
         *
         * 2,实现核心方法
         * doInBackground(String... params){}
         *
         * onPostExecute(byte[] result)
         *
         * 3,在主线程中执行异步请求


        >完整的AsyncTask
        public class MyAsyncTask extends AsyncTask<String, Integer, List<String>>{
            
            /**
             * 在首次执行异步任务时  调用此方法   做初始化操作
             */
            @Override
            protected void onPreExecute() {
                // TODO Auto-generated method stub
                super.onPreExecute();
            }

            /**
             * 在子线程中执行   做耗时操作
             */
            @Override
            protected List<String> doInBackground(String... params) {
                // TODO Auto-generated method stub
                //publishProgress(values)
                return null;
            }
            /**
             * 更新进度的方法   在doInBackground中 执行publishProgress(values)  将进度值发送给onProgressUpdate
             */
            @Override
            protected void onProgressUpdate(Integer... values) {
                // TODO Auto-generated method stub
                super.onProgressUpdate(values);
            }
            
            /**
             * 在主线程中更新UI 在执行完doInBackground之后执行 onPostExecute
             */
            @Override
            protected void onPostExecute(List<String> result) {
                // TODO Auto-generated method stub
                super.onPostExecute(result);
            }
            
            
            //点击其他按钮  取消AsyncTask时  执行此方法
            @Override
            protected void onCancelled(List<String> result) {
                // TODO Auto-generated method stub
                super.onCancelled(result);
            }
            
            
            
        }



    5, 设置View的显示与隐藏
        >visibility=""
            >gone:        隐藏 不占空间
            >visible      显示
            >invisible    隐藏  占空间


        >setVisibility()
            >View.GONE
            >View.VISIBLE
            >View.INVISIBLE

    6,  AsyncTask注意事项:
        >1,AsyncTask实例只能调用一次
        >2,必须在Ui线程得到AsyncTask对象
        >3,AsyncTask方法 系统自动调用
        >4,数据进行交互(子线程和主线程交互)AsyncTask,否则开启一个线程就行
        >5,异步任务必须在UI线程启动



        

        
            



           
  • 相关阅读:
    变量、内存区域、MDK文件(map、htm)
    全双工与半双工的区别
    4G网络 LTE、 FDD 和TD网络格式区别
    国内4G频段划分
    Nordic老版官网介绍(2018-11-30停止更新)
    无线通信模组产业链及竞争格局分析
    LBS 与 GPS 定位之间的区别
    99%的人都理解错了HTTP中GET与POST的区别(转自知乎)
    goto 的用法
    C语言字节对齐 __align(),__attribute((aligned (n))),#pragma pack(n)
  • 原文地址:https://www.cnblogs.com/muyuge/p/6152285.html
Copyright © 2011-2022 走看看