android中asynctask的使用实例
- 参考此blog写的非常的好
http://www.cnblogs.com/devinzhang/archive/2012/02/13/2350070.html
MainActivity.java
- import android.support.v7.app.AppCompatActivity;
- import android.os.Bundle;
- import android.view.View;
- import android.widget.Button;
- import android.widget.ProgressBar;
- import android.widget.TextView;
- public class MainActivity extends AppCompatActivity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- Button button = (Button)findViewById(R.id.button_downLoad);
- final ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressBar);
- final TextView textView = (TextView) findViewById(R.id.textView_hello);
- final ProgressBar progressBar2 = (ProgressBar)findViewById(R.id.progressBar2);
- button.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- ProgressBarAsyncTask asyncTask = new ProgressBarAsyncTask(textView, progressBar, progressBar2);//传进去需要改变的控件
- asyncTask.execute(55);//传入初始参数(这里表示将从55开始计数)
- }
- });
- }
- }
activity_main.xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
- android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
- android:paddingRight="@dimen/activity_horizontal_margin"
- android:paddingTop="@dimen/activity_vertical_margin"
- android:paddingBottom="@dimen/activity_vertical_margin"
- android:orientation="vertical"
- android:gravity="center_horizontal"
- tools:context=".MainActivity">
- <TextView
- android:text="Hello World!"
- android:id="@+id/textView_hello"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
- <ProgressBar
- style="?android:attr/progressBarStyleHorizontal"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:id="@+id/progressBar"
- android:layout_gravity="center_horizontal" />
- <ProgressBar
- style="?android:attr/progressBarStyleHorizontal"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:id="@+id/progressBar2"
- android:progress="100"
- android:layout_gravity="center_horizontal" />
- <Button
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="Download"
- android:id="@+id/button_downLoad"
- android:layout_gravity="center_horizontal" />
- </LinearLayout>
- ProgressBarAsyncTask.java
- package com.turtle920.tread;
- import android.os.AsyncTask;
- import android.widget.ProgressBar;
- import android.widget.TextView;
- public class ProgressBarAsyncTask extends AsyncTask<Integer, Integer, String> {
- /*Params 启动任务执行的输入参数,比如HTTP请求的URL。由主线程中的asyncTask.execute(55);传入
- Progress 后台任务执行的百分比。
- Result 后台执行任务最终返回的结果,比如String。*/
- private TextView textView;
- private ProgressBar progressBar;
- private ProgressBar progressBar2;
- public ProgressBarAsyncTask(TextView textView, ProgressBar progressBar, ProgressBar progressBar2) {
- super();
- this.textView = textView;
- this.progressBar = progressBar;
- this.progressBar2 = progressBar2;
- }
- /**
- * 这里的Integer参数对应AsyncTask中的第一个参数
- * 这里的String返回值对应AsyncTask的第三个参数
- * 该方法并不运行在UI线程当中,主要用于异步操作,所有在该方法中不能对UI当中的空间进行设置和修改
- * 但是可以调用publishProgress方法触发onProgressUpdate对UI进行操作
- */
- @Override
- protected String doInBackground(Integer... params) {//...表示可以传若干参数
- NetOperator netOperator = new NetOperator();
- int i = params[0];//由主线程中的asyncTask.execute(55);传入
- for (i = params[0]; i <= 100; i+=1) {
- netOperator.operator();
- publishProgress(i, 100-i);//传两个参数给onProgressUpdate
- }
- return "" + i + " " + params[0].intValue() + "****";//传参数给onPostExecute
- }
- /**
- *该方法运行在UI线程当中,并且运行在UI线程当中 可以对UI空间进行设置
- */
- @Override
- protected void onPreExecute() {
- textView.setText("开始执行异步线程");
- }
- /**
- * 这里的Intege参数对应AsyncTask中的第二个参数
- * 在doInBackground方法当中,,每次调用publishProgress方法都会触发onProgressUpdate执行
- * onProgressUpdate是在UI线程中执行,所有可以对UI空间进行操作
- */
- @Override
- protected void onProgressUpdate(Integer... values) {//参数来自publishProgress()
- int value = values[0];
- int value1 = values[1];
- progressBar.setProgress(value);
- progressBar2.setProgress(value1);
- textView.setText(""+value+"% "+value1);
- }
- /**
- * 这里的String参数对应AsyncTask中的第三个参数(也就是接收doInBackground的返回值)
- * 在doInBackground方法执行结束之后在运行,并且运行在UI线程当中 可以对UI空间进行设置
- */
- @Override
- protected void onPostExecute(String result) {//参数来自doInBackground() return
- textView.setText("异步操作执行结束" + result);
- }
- }
- NetOperator.java
- package com.turtle920.tread;
- //模拟网络环境
- public class NetOperator {
- public void operator(){
- try {
- //休眠
- Thread.sleep(10);
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
android中asynctask的使用实例的更多相关文章
- Android中AsyncTask异步
今天我们学习了 AsyncTack, 这是一个异步任务. 那么这个异步任务可以干什么呢? 因为只有UI线程,即主线程可以对控件进行更新操作.好处是保证UI稳定性,避免多线程对UI同时操作. 同时要把耗 ...
- Android中AsyncTask的使用 (包含文件的下载与存储)
今天看到大神写的相关详解Android中AsyncTask的使用,真的很是佩服,下面我将学习到的AsynTask知识运用到项目中,其中也涉及一些文件的下载与存储到本地 啥都不说了,直接上代码,我将对其 ...
- Android中AsyncTask使用具体解释
在Android中我们能够通过Thread+Handler实现多线程通信.一种经典的使用场景是:在新线程中进行耗时操作.当任务完毕后通过Handler向主线程发送Message.这样主线程的Handl ...
- 详解Android中AsyncTask的使用
在Android中实现异步任务机制有两种方式,Handler和AsyncTask. Handler模式需要为每一个任务创建一个新的线程,任务完成后通过Handler实例向UI线程发送消息,完成界面的更 ...
- 具体解释Android中AsyncTask的使用
在Android中实现异步任务机制有两种方式,Handler和AsyncTask. Handler模式须要为每个任务创建一个新的线程,任务完毕后通过Handler实例向UI线程发送消息,完毕界面的更新 ...
- Android中AsyncTask的简单用法 .
在开发Android应用时必须遵守单线程模型的原则: Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行.在单线程模型中始终要记住两条法则: 1. 不要阻塞UI线程 2. 确保只 ...
- Android中AsyncTask的使用
原文 https://blog.csdn.net/liuhe688/article/details/6532519 在Android中实现异步任务机制有两种方式,Handler和AsyncTask. ...
- 并发编程之Android中AsyncTask使用详解(四)
更多Android高级架构进阶视频免费学习请点击:[https://space.bilibili.com/474380680] 在Android中我们可以通过Thread+Handler实现多线程通信 ...
- Android笔记(三十五) Android中AsyncTask
AsyncTask<Params,Progress,Result> 是一个抽象类,通常继承这个抽象类需要指定如下几个泛型参数: 1. Params :启动任务时出入参数的类型 2. P ...
随机推荐
- 【P3254】圆桌问题(最大流,洛谷)
看到题目,产生第一反应,是否可以匹配的是这么多.那么连边跑一遍最大流就行了. 从源点向每个单位连一条长度为l的边,然后所有单位和餐桌分别连边,流量为1,所有餐桌向汇点连边,流量为餐桌容量.然后跑一遍最 ...
- Makefile文件应用——huge项目
提高复用性 在build目录下,保存公用部分make.rule (1)绝对路径 用ROOT变量保存项目根目录 (2)增加控制变量 EXE/LIB/ (3)头文件查找目录 gcc 的-I(i的大写)选项 ...
- DATASTAGE中ODBC连接的配置
修改2个配置文件: cat /mistel/IBM/InformationServer/Server/DSEngine/.odbc.ini cat /mistel/IBM/InformationSer ...
- hibernate的多对多配置
Teacher.java package com.xiaostudy.domain; import java.util.HashSet; import java.util.Set; /** * Tea ...
- ftp禁止切换回上级目录
打开并编辑/etc/vsd/vsd.conf # vi /etc/vsd/vsftpd.conf 取消如下行注释 chroot_list_enable=YES 保存并重启vsftpd # /etc/i ...
- 计算机网络 - IP和端口
计算机网络分层模型 OSI分层模型:物理层.数据链路层.网络层.传输层.会话层.表示层.应用层: TCP/IP分层模型:物理+数据链路层.网络层.传输层.应用层: IP地址 IP地址是一个32位的整数 ...
- JavaScript tips —— 谈谈数组乱序
前言 先看一个段代码 function randArr (arr) { return arr.sort(() => { return (Math.random() - 0.5); }); } 目 ...
- Pycharm for mac 快捷键
cmd b 跳转到声明处(cmd加鼠标) opt + 空格 显示符号代码 (esc退出窗口 回车进入代码) cmd []光标之前/后的位置 opt + F7 find usage cmd backsp ...
- chrome浏览器经常无响应
chrome浏览器(v68)安装一个fiddler证书导入后点击关闭,会出现无响应 有时候动不动会无响应,今天百度了一下,发现真正的"罪魁祸首"是搜狗输入法,升级一下就好了 万恶的 ...
- struts中操作request,session
在Action类中操作request,session 方法一.利用ActionContext.getContext().get("request"); //返回的是Map集合 Ma ...