asynctask基本使用
来源:互联网 发布:手机域名是什么 编辑:程序博客网 时间:2024/06/04 07:24
1、asynctask是一个工具类
2.其实ansycktask就是对子线程和handler的一个封装。
3、自己写一个类继承AsyncTask需要三个泛型参数,第一个是你传进来的
参数,比如是你下载的时候的url,第二个是进度的参数,第三个是返
回值的类型,没有返回值写Void,
class DownLoadTask extend AsyncTask<String,Integer,String>{}
4、public void clickDownLoad(View view) {
pd = new ProgressDialog(this);
pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
new DownLoadTask().execute("http://www.baidu.com/lol.exe");
}
class DownLoadTask extends AsyncTask<String, Integer, String> {
/**
* 第三个执行的方法,是在后台线程中执行
*
* @param values
*/
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
pd.setProgress(values[0]);
}
/**
* 第四个执行,任务执行完了执行,在主线程中执行
*
* @param s
*/
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show();
pd.dismiss();
}
/**
* 第一个执行的方法,在主线程中执行,这是做准备工作的
*/
@Override
protected void onPreExecute() {
super.onPreExecute();
pd.show();
}
/**
* 第二个执行,更新进度的方法,在主线程中执行
*
* @param params
* @return
*/
@Override
protected String doInBackground(String... params) {
int temp = 0;
while (temp <= 100) {
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
//这个方法每调用一次,onProgressUpdate就调用一次
publishProgress(temp);
temp++;
}
return "下载完成";
}
}
5、源码分析理解:正常的调用asynctask.excute默认的是“同步的线程池”,意思就是假如
while(i<100){
new DownLoadTask("任务"+i).excute("baidu,....");
i++;
}
这样只能等任务1执行完才能执行任务2,然后执行任务3,按照顺序来,如果那一个
任务卡住了,后面的就不能执行,必须等待着前面的任务执行完。
如果想同时的去执行这100个任务,就必须用另外一个,“并发线程池”,
while(i<100){
new DownLoadTask("任务"+i).excuteOnExcutor(AsyncTask.THREAD_POOL_EXCUTOR,"baidu,,,,,,,");
i++;
}
2.其实ansycktask就是对子线程和handler的一个封装。
3、自己写一个类继承AsyncTask需要三个泛型参数,第一个是你传进来的
参数,比如是你下载的时候的url,第二个是进度的参数,第三个是返
回值的类型,没有返回值写Void,
class DownLoadTask extend AsyncTask<String,Integer,String>{}
4、public void clickDownLoad(View view) {
pd = new ProgressDialog(this);
pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
new DownLoadTask().execute("http://www.baidu.com/lol.exe");
}
class DownLoadTask extends AsyncTask<String, Integer, String> {
/**
* 第三个执行的方法,是在后台线程中执行
*
* @param values
*/
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
pd.setProgress(values[0]);
}
/**
* 第四个执行,任务执行完了执行,在主线程中执行
*
* @param s
*/
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show();
pd.dismiss();
}
/**
* 第一个执行的方法,在主线程中执行,这是做准备工作的
*/
@Override
protected void onPreExecute() {
super.onPreExecute();
pd.show();
}
/**
* 第二个执行,更新进度的方法,在主线程中执行
*
* @param params
* @return
*/
@Override
protected String doInBackground(String... params) {
int temp = 0;
while (temp <= 100) {
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
//这个方法每调用一次,onProgressUpdate就调用一次
publishProgress(temp);
temp++;
}
return "下载完成";
}
}
5、源码分析理解:正常的调用asynctask.excute默认的是“同步的线程池”,意思就是假如
while(i<100){
new DownLoadTask("任务"+i).excute("baidu,....");
i++;
}
这样只能等任务1执行完才能执行任务2,然后执行任务3,按照顺序来,如果那一个
任务卡住了,后面的就不能执行,必须等待着前面的任务执行完。
如果想同时的去执行这100个任务,就必须用另外一个,“并发线程池”,
while(i<100){
new DownLoadTask("任务"+i).excuteOnExcutor(AsyncTask.THREAD_POOL_EXCUTOR,"baidu,,,,,,,");
i++;
}
0 0
- AsyncTask的基本使用
- AsyncTask的基本使用
- AsyncTask的基本使用
- AsyncTask的基本使用
- asynctask基本使用
- AsyncTask基本使用
- 【Android基础知识】AsyncTask基本使用
- AsyncTask的基本使用及讲解
- Android异步任务之AsyncTask基本使用
- AsyncTask的基本使用及工作原理
- AsyncTask doinbackground onProgressUpdate onCancelled onPostExecute的基本使用
- Android异步消息处理机制(3)AsyncTask基本使用
- 异步加载之AsyncTask的基本使用(一)
- Android_NewBird之Asynctask的基本使用(1)
- Android_NewBird之Asynctask的基本使用(2)
- AsyncTask(异步任务)分析之基本使用
- AsyncTask 异步任务基本使用--下载视频
- AsyncTask使用
- 适配篇-爱上自适应(最简单的解决方案)
- 解决跨域问题
- 观察者模式实例
- 设置ntpdate服务开机启动校验时间
- erlang dialyzer使用
- asynctask基本使用
- c# vs2010 连接access数据库
- android Rxjava+Retrofit
- 时钟频率对程序效率影响测试(Platform: ARM ZYNQ 7000 ZP20 Board)
- PHP2.4+mysql5.7安装后的一个问题
- GNU C - 一个别致的HelloWorld程序 引申到: __attribute__((constructor)|(destructor)(PRIORITY))
- 【webservice】Axis2 客户端调用 设置超时时间
- SQL总结(快速参考)
- Nginx的下载、安装、启动|重启|关闭-虚拟机下操作