安卓AsyncTask
1.什么是AsyncTask
AsyncTask是安卓提供的轻量级(实现代码少)的异步类。
为了减低异步通信的开发难度,提供AsyncTask。
AsyncTask直接继承与object类,位于androi.os包中。
使用AsyncTask可以忽略looper、MessageQueue、Handler等复杂对象,更省时。
2.如何使用AsyncTask
新建内部类继承AsyncTask。
定义AsyncTask三种泛型参数,重写doInBackground抽象方法,重写onPostExecute、onProgressUpdate方法。
在需要启动的地方调用execute方法。
3.使用AsyncTask做倒计时
首先将按键、布局设定好;
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.example.ll.handler.TaskActivity">
<EditText
android:id="@+id/ed"android:layout_width="match_parent"android:layout_height="50dp" /><TextView
android:gravity="center"android:text="倒计时"android:textSize="30sp"android:id="@+id/tv"android:layout_width="match_parent"android:layout_height="200dp" /><Button
android:text="开始计时"android:id="@+id/btn"android:layout_width="match_parent"android:layout_height="50dp" />
</LinearLayout>
然后绑定Id
private void BIndId() {editText=findViewById(R.id.ed);textView=findViewById(R.id.tv);button=findViewById(R.id.btn);}
接着创建内部类继承syncTask,重写doInBackground抽象方法,重写onPostExecute、onProgressUpdate方法。
class myabc extends AsyncTask<Integer,Integer,String> {@Overrideprotected String doInBackground(Integer... integers) {for (int i=0;i<integers[0];i++){try {Thread.sleep(1000);publishProgress(i);//调用onProgressUpdate方法} catch (InterruptedException e) {e.printStackTrace();}}return "计时结束";}@Overrideprotected void onProgressUpdate(Integer... values) {super.onProgressUpdate(values);textView.setText("计时:"+values[0]);}@Override//耗时操作完成时,请调用此方法(主线程)protected void onPostExecute(String s) {super.onPostExecute(s);textView.setText(s);}}
}
最后 在需要启动的地方调用execute方法。
button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {int time=Integer.parseInt(editText.getText().toString());new myabc().execute(time);}});
4.使用AsyncTask做进度条
其实进度条与做倒计时差不多。
首先将按键、布局设定好;
?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context="com.example.ll.handler.Async">
<ProgressBarandroid:id="@+id/pbar"style="@style/Widget.AppCompat.ProgressBar.Horizontal"android:layout_width="match_parent"android:layout_height="300dp" /><Buttonandroid:id="@+id/kaishibtn"android:text="开始下载"android:layout_width="match_parent"android:layout_height="50dp" /><Buttonandroid:id="@+id/quxiao"android:text="取消下载"android:layout_width="match_parent"android:layout_height="50dp" />
</LinearLayout>
rivate void BindId() {zbtv=findViewById(R.id.zbxztv);ksbtn=findViewById(R.id.zsxabtn);}
然后绑定Id
private void BindId() {bar=findViewById(R.id.pbar);btn=findViewById(R.id.kaishibtn);btn.setOnClickListener(this);bar.setMax(10);}
接着创建内部类继承syncTask,重写doInBackground抽象方法,重写onPostExecute、onProgressUpdate方法。
lass mycvb extends AsyncTask<Integer,Integer,Integer>{@Overrideprotected Integer doInBackground(Integer... integers) {for(int i=1;i<=10;i++){try {Thread.sleep(1000);publishProgress(i);} catch (InterruptedException e) {e.printStackTrace();}}return 1;}@Overrideprotected void onProgressUpdate(Integer... values) {super.onProgressUpdate(values);bar.setProgress(values[0]);}@Overrideprotected void onPostExecute(Integer s) {super.onPostExecute(s);btn.setText("下载完成");}}
}
最后 在需要启动的地方调用execute方法。
public void onClick(View view) {switch (view.getId()){case R.id.btn:btn.setEnabled(false);btn.setText("正在下载");new mycvb().execute();break;}}
5.Execute()和executeOnExecutor有何区别
Execute方法:
启动异步消息,AsyncTask中的方法会被系统统一调用
Execute方法必须在UI线程中调用,使用Execute启动多个任务时,会按照现后顺序逐一进行。
executeOnExecutor:
启动异步消息,AsyncTask中的方法会被系统统一调用
executeOnExecutor方法必须在UI线程中调用,使用executeOnExecutor可以同时启动多个任务时,最多5个一起执行。
6.更喜欢AsyncTask还是Handler
其实吧,我觉得谈不上那个更喜欢,但是只有一点可以肯定时那个方便用哪个。
安卓AsyncTask相关推荐
- 安卓TV开发(八) 移动智能终端多媒体爬虫技术 获取加载网页视频源
转载请标明出处:http://blog.csdn.net/sk719887916/article/details/40049137,作者:skay 从上一篇学习中,学习了多媒体技术中的怎么去用josu ...
- 移动智能终端多媒体爬虫技术 获取加载网页视频源
转载请标明出处:http://blog.csdn.net/sk719887916/article/details/40049137,作者:skay 从上一篇学习中,学习了多媒体技术中的怎么去用josu ...
- 安卓开发30:AsyncTask的用法
http://blog.csdn.net/initphp/article/details/10392093 安卓开发笔记系列(43) 在开发Android应用时必须遵守单线程模型的原则: Andro ...
- 深入理解安卓异步任务AsyncTask
上一节讲了asynctask的官方文档,这一节深入讲解如何深入使用AsyncTask. asynctask本质上也是线程启动,只是它封装了一些内容,可以运行在后台,同时可以和UI线程交互. async ...
- 安卓多线程——AsyncTask
在采集视频的同时需要对视频进行实时处理,因此要使用到多线程. AsyncTask是android提供的一个处理异步任务的框架,相当于Handler+Thread.相比而言,AsyncTask的优点是封 ...
- 安卓移动开发——用AsyncTask来实现计时器和进度条
运行前 运行后 布局文件 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" ...
- 关于安卓版的eclipse连接数据库并誓言增删改查
在安卓环境下连接数据库下面是主要代码极其作用: 1.编写 The Class类把课程表courses.db当做一个实体类,hashcode和equals这两个类是为了判断输入的查询内容和Exc ...
- 安卓AsyncTack详解
我们知道安卓中的UI线程不是线程安全的,即不能在UI线程中进行耗时操作,所以我们通常的做法是开启一个子线程来进行耗时操作,然后将处理后的结果运用Handler机制传递给UI线程,在UI线程中根据处理后 ...
- AsyncTask 实现异步处理任务
本文来自:安卓航班网 在开发Android应用时必须遵守单线程模型的原则: Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行.在单线程模型中始终要记住两条法则: 1. 不要阻塞 ...
最新文章
- 如何规划创建一个家庭实验室
- keras 修仙笔记一
- 线性代数学习笔记(几何版)
- 新电子书:解决生产中Java应用程序错误的完整指南
- iOS开发之抽屉效果
- 面试官解答:BAT等大厂最需要怎样的程序员
- Java中this、super的用法(2)
- axure原型设计:手机版可视化图表
- 计算机硬件的五大组成部分
- [CF1031E]Triple Flips
- Element UI 中国省市区级联数据
- 苹果app旧版本软件下载
- 如何拍背景虚化的照片_如何拍摄出突出主体(背景虚化)的照片
- 微信小程序——猜数字游戏小案例
- Vue - 实现图片裁剪功能,并上传到服务器(内置第三方最优秀的裁剪图片组件,上传到服务器功能)干净整洁无 BUG 的示例源码与超详细的注释,兼容任意浏览器
- 女程序员,作程序员还是作女人?
- thinkphp6,压缩图片内存,并上传到oss,质量影响不大。
- 稀疏表示 河流多元信息处理 matlab
- PyJWT 第三方包
- format()用法
热门文章
- 版本控制工具VSS使用介绍
- 记录一次redis莫名其妙丢失token的解决方案
- PTA 1054 求平均值 (20 分)
- 如何成为有效学习的高手(笔记)
- 国内android应用商城中程序隐私泄露分析,基于数据生命周期的Android应用程序隐私泄露分析技术研究...
- LoRa笔记03 LoRa sx1276 sx1278空中唤醒研究
- MVN打包报错:在类路径或引导类路径中找不到程序包 java.lang
- naticat连接mysql报错_「2509」Navicat连接mysql报错2509 - seo实验室
- ai切换rgb模式_AI基础教程:如何更改CMYK模式?更改的两个方法
- Mybatis联表查询:多对多(注解实现)