美文网首页Android基础优化
android异步处理AsyncTask

android异步处理AsyncTask

作者: WangYouHu | 来源:发表于2018-07-21 00:24 被阅读0次

    相信不少攻城狮觉得另开一个类写线程肯定觉得特别麻烦 代码也繁琐 毕竟不能写在主线程中 主线程只用来刷新一些ui页面 但AsyncTask就不同了 可以写在主线程中 不会造成程序崩溃 是谷歌为了解决Thread复杂麻烦出了一个解决方案  这里我就简单讲两个例子

    主要是理解才可以灵活应用 我这里先讲一个数字增长从0到100使用到AsyncTask线程后台运行 为了显示出效果使用到线程休眠 这里先部署一下包的布局和xml 文件

    第一个为功能清单 一些权限sdk等在这里设置

    MainActivity是我第一个讲的内容ReadText 读取设备存储的一个txt文件 ReadInt 是读取网路数据的一个java

    android异步处理AsyncTask android异步处理AsyncTask

    然后看一下我的xml 代码 我这里选的线性布局 你可以根据爱好和每个布局的特色来设计布局 这里我就写了两个控件 TextView和Button 我为了方便没把文字写到数组中 根据需要自己去添加

    android异步处理AsyncTask

    然后来看我的java文件 先照顾一下一些小白吧 第一行为你的包名

    import 是调用api文件 以第一个为例 调用 安卓包下的APP的activity

    然后公开的class 继承于Activity

    简单的声明控件 格式为private 控件总称 你想定义的名字

    这里是activity的生命周期onCreate返回一个保存过的缓存数据 具体生命周期建议去谷歌官网查看

    设置上下文示图 res下的布局的布局id

    绑定控件id 和按钮设置监听 按钮设置点击监听建议使用这个 不建议使用xml中指明点击监听 在一些手机可能会出问题

    在这里我设置了按钮点击后就不可以再点击了 设置Enabled 为假

    调用我的MyTask方法 下面会写出来具体的实现

    android异步处理AsyncTask

    这里具体写了一个MyTask 继承于AsyncTask 如果你要设置其他的类可以访问可以添加public公开private自身包访问 protected只有这个方法才可以访问

    首先写出来这个方法 必须生成一个方法 叫doInBackground后台运行的方法 你可以右击生成方法 或者点红色感叹号自动补全代码实现方法

    onPreExecute准备工作做的事情 我加了一个设置文本用来提示用户正在加载

    然后后台运行的工作是数字自增加 注意 一定不要把ui刷新写在这里 否则会崩溃

    android异步处理AsyncTask

    加入一个线程 防止自增长过快 看不出来效果

    用try 方法包围

    最后无法实行的结果 返回一个空值

    进展更新调用的方法 定义int类型的值 文本设置得到的数字

    android异步处理AsyncTask

    最后进程结束的工作 进程完成自动调用这个方法 我写了两个提示 一个Toast一个文本改成执行完毕

    android异步处理AsyncTask

    效果图就不示范了 本人确保代码可以正确运行 有不懂的可以来问我

    下面开始讲第二个示例 来获取手机存储设备的一个txt文件 建议自己写一个文件来实践 直接放到手机存储中即可 你也可以使用完毕删除他 我的文件名叫做testText.txt

    1同样先来示例我的布局截图自己xml代码

    android异步处理AsyncTask

    这里加了一个按钮用来读取文件 然后还有一个ProgressBar用来显示进度 EditText用来显示获取的文件

    android异步处理AsyncTask

    前面已经讲过这个了 这里就不多讲了

    android异步处理AsyncTask

    按钮点击监听实现指明路径 开启一个新的AsyncTask 注意括号里的代码 路径 整数 string数组

    注意需要指明路径的正确位置 环境 得到存储设备 文件名

    下面调用的方法也已经讲过 有不明白的去上面看一下

    android异步处理AsyncTask

    主要是在自己写这个读的方法 得到数组 初始化 为了提示用户得到数据写了两个长度来给进度条显示进程

    缓冲读取器的初始化

    下面尝试读取文件 初始化缓冲读取器 输出流读取 路径输出读取 路径名字file 前面已经定义过路径的地址 编码格式为GBK 可以根据自己情况而定 得到缓冲读取器中的读取行

    android异步处理AsyncTask

    需要判断文件中是否有行内容 当不为空执行查询 stringBuilder动态数组添加获取到的内容加换行符号 读取长度叠加等于文件得到字节的长度 定义一个int值用来公布汇报进程 同样休眠0.1秒 行等于缓冲读取器的读取行 返回数组 下面是防止找不到文件 或已经读取完毕等意外情况的优化 自动生成代码

    android异步处理AsyncTask

    最后 尝试如果缓冲读取器不为空值 需要关闭缓冲读取器 否则内存泄露 会影响用户体验的性能 否则出问题返回空值 思路要严谨

    线程更新的时候将得到的长度解析设置到进度条上显示

    最容易忽略的一步 在功能清单上注册读取内存卡的权限

    android异步处理AsyncTask

    到这里我们的优化讲解就已经讲完了 我把所有用到的数据都公布在这里了 如果还有不懂的 点个小心心送给小编 不给我也可以讲述 不给就是小编讲的不够完美嘛

    这么晚了 我也要洗洗睡了

    相关文章

      网友评论

        本文标题:android异步处理AsyncTask

        本文链接:https://www.haomeiwen.com/subject/vmjcmftx.html