博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android中asynctask的使用实例
阅读量:5371 次
发布时间:2019-06-15

本文共 4127 字,大约阅读时间需要 13 分钟。

参考此blog写的非常的好 http://www.cnblogs.com/devinzhang/archive/2012/02/13/2350070.html

MainActivity.java

1 import android.support.v7.app.AppCompatActivity; 2 import android.os.Bundle; 3 import android.view.View; 4 import android.widget.Button; 5 import android.widget.ProgressBar; 6 import android.widget.TextView; 7  8 public class MainActivity extends AppCompatActivity { 9 10     @Override11     protected void onCreate(Bundle savedInstanceState) {12         super.onCreate(savedInstanceState);13         setContentView(R.layout.activity_main);14 15         Button button = (Button)findViewById(R.id.button_downLoad);16         final ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressBar);17         final TextView textView = (TextView) findViewById(R.id.textView_hello);18         final ProgressBar progressBar2 = (ProgressBar)findViewById(R.id.progressBar2);19 20         button.setOnClickListener(new View.OnClickListener() {21             @Override22             public void onClick(View v) {23                 ProgressBarAsyncTask asyncTask = new ProgressBarAsyncTask(textView, progressBar, progressBar2);//传进去需要改变的控件24                 asyncTask.execute(55);//传入初始参数(这里表示将从55开始计数)25             }26         });27 28     }29 }

activity_main.xml

ProgressBarAsyncTask.java
1 package com.turtle920.tread; 2  3 import android.os.AsyncTask; 4 import android.widget.ProgressBar; 5 import android.widget.TextView; 6  7 public class ProgressBarAsyncTask extends AsyncTask
{ 8 /*Params 启动任务执行的输入参数,比如HTTP请求的URL。由主线程中的asyncTask.execute(55);传入 9 Progress 后台任务执行的百分比。10 Result 后台执行任务最终返回的结果,比如String。*/11 private TextView textView;12 private ProgressBar progressBar;13 private ProgressBar progressBar2;14 15 16 public ProgressBarAsyncTask(TextView textView, ProgressBar progressBar, ProgressBar progressBar2) {17 super();18 this.textView = textView;19 this.progressBar = progressBar;20 this.progressBar2 = progressBar2;21 }22 23 /**24 * 这里的Integer参数对应AsyncTask中的第一个参数25 * 这里的String返回值对应AsyncTask的第三个参数26 * 该方法并不运行在UI线程当中,主要用于异步操作,所有在该方法中不能对UI当中的空间进行设置和修改27 * 但是可以调用publishProgress方法触发onProgressUpdate对UI进行操作28 */29 @Override30 protected String doInBackground(Integer... params) {
//...表示可以传若干参数31 NetOperator netOperator = new NetOperator();32 int i = params[0];//由主线程中的asyncTask.execute(55);传入33 for (i = params[0]; i <= 100; i+=1) {34 netOperator.operator();35 publishProgress(i, 100-i);//传两个参数给onProgressUpdate36 }37 return "" + i + " " + params[0].intValue() + "****";//传参数给onPostExecute38 }39 40 /**41 *该方法运行在UI线程当中,并且运行在UI线程当中 可以对UI空间进行设置42 */43 @Override44 protected void onPreExecute() {45 textView.setText("开始执行异步线程");46 }47 48 /**49 * 这里的Intege参数对应AsyncTask中的第二个参数50 * 在doInBackground方法当中,,每次调用publishProgress方法都会触发onProgressUpdate执行51 * onProgressUpdate是在UI线程中执行,所有可以对UI空间进行操作52 */53 @Override54 protected void onProgressUpdate(Integer... values) {
//参数来自publishProgress()55 int value = values[0];56 int value1 = values[1];57 progressBar.setProgress(value);58 progressBar2.setProgress(value1);59 textView.setText(""+value+"% "+value1);60 }61 62 /**63 * 这里的String参数对应AsyncTask中的第三个参数(也就是接收doInBackground的返回值)64 * 在doInBackground方法执行结束之后在运行,并且运行在UI线程当中 可以对UI空间进行设置65 */66 @Override67 protected void onPostExecute(String result) {
//参数来自doInBackground() return68 textView.setText("异步操作执行结束" + result);69 }70 71 72 }
NetOperator.java
1 package com.turtle920.tread; 2  3 //模拟网络环境 4 public class NetOperator { 5  6     public void operator(){ 7         try { 8             //休眠 9             Thread.sleep(10);10         } catch (InterruptedException e) {11             // TODO Auto-generated catch block12             e.printStackTrace();13         }14     }15 16 }
 

转载于:https://www.cnblogs.com/turtle920/p/4901713.html

你可能感兴趣的文章
MVC3 控件
查看>>
mysql (一)
查看>>
photoshop图层样式初识1
查看>>
【.NET】使用HtmlAgilityPack抓取网页数据
查看>>
typedef的使用
查看>>
基于位置的本地商铺个性化推荐
查看>>
职场上一个人情商高的十种表现
查看>>
【底层原理】深入理解Cache (下)
查看>>
Elasticsearch安装中文分词插件IK
查看>>
进阶4:常见函数-单行函数
查看>>
简述企业信息化与企业架构关系
查看>>
npoi List 泛型导出
查看>>
流程图怎么画?分享绘制流程图简单方法
查看>>
squid的处理request和reply的流程
查看>>
硬件_陀螺仪
查看>>
三、winForm-DataGridView操作——DataGridView 操作复选框checkbox
查看>>
SSIS的部署和配置
查看>>
计算机内存管理介绍
查看>>
POJ 2761 Feed the dogs 求区间第k大 划分树
查看>>
mysql中间件研究(Atlas,cobar,TDDL)[转载]
查看>>