zoukankan      html  css  js  c++  java
  • 异步操作之深入了解

        首先,先说一说AsyncTask<Void,Void,Void>三个泛型参数的对应问题。第一个参数对应的是doInBackground()里面的参数,如以

      doInBackground(Integer... parm)形式存在,而参数传入的地方是执行execute()的方法,如以execute(1000)形式存在,当然也可以

      是execute(1000,2000),因为parma形参可以看作为一个Integer的数组。第二个参数对应的是onProgressUpdate()里面的参数,形式如

      onProgressUpdate(Integer... parm)实际调用见下文红色处。第三个参数对应的是doInBackground方法的返回类型还有就是onPostExecute

      方法的参数类型,实际调用见下文蓝色处。

        然后,说说现在比较完整的异步操作的一个总体流程。

        A. 让处理时间较长的操作(网上下载,线程阻塞等)独立出来成为一个类

        B. 让这一个类继承AsynTask<Void,Void,Void>

        C. 当在UI线程里面生成异步操作的类的一个实例,然后调用execute方法启动新线程,当然这个方法可以携带参数(实参),此参数会被

         传递到doInBackground()方法里

        D. 然后程序会在异步操作中调用onPreExecute方法,此方法实际上是在UI线程中运行,所以在方法中能够操作UI界面的组件

        E. 跟着程序会在一步操作中调用doInBackground方法,此方法是在新开的线程中执行一些耗时的操作,因此是不能够访问

           UI界面的组件。不过此时我们可以从doInBackground方法中调用publicProgress方法通知异步操作的另一个方法

           onProgressUpdate去更新UI线程(此方法实际上是在UI线程中运行,所以在方法中能够操作UI界面的组件)

        F. 异步操作结束后程序会在异步操作中调用onPostExecute方法,此方法实际上是在UI线程中运行,所以在方法中能够操作

           UI界面的 组件。从doInBackground方法中返回的数值会被传入到此方法的参数中

    ***附加一个小例子:/Files/lee0oo0/AsynTaskTest.rar 

  • 相关阅读:
    linux vps定时备份网站、数据库命令sh
    zencart批量表上传后 标题显示为网址 批量修改标题状态 SEO三要素
    robots.txt防止向黑客泄露网站的后台和隐私
    在网页中插入地图展示公司地址
    网站调用百度地图 根据地址查询经纬度
    jquery 未来元素事件示例 on() delegate() live()
    .htaccess A网站单页面301到B网站单页面
    linux批量设置部分文件与文件夹权限
    php中禁止单个ip与ip段访问的代码小结
    Spring整合ActiveMQ
  • 原文地址:https://www.cnblogs.com/lee0oo0/p/2387639.html
Copyright © 2011-2022 走看看