android中asynctask的使用实例
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了android中asynctask的使用实例,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4989字,纯文字阅读大概需要8分钟。
内容图文
参考此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 { 910 @Override 11protectedvoid onCreate(Bundle savedInstanceState) { 12super.onCreate(savedInstanceState); 13 setContentView(R.layout.activity_main); 1415 Button button = (Button)findViewById(R.id.button_downLoad); 16final ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressBar); 17final TextView textView = (TextView) findViewById(R.id.textView_hello); 18final ProgressBar progressBar2 = (ProgressBar)findViewById(R.id.progressBar2); 1920 button.setOnClickListener(new View.OnClickListener() { 21 @Override 22publicvoid onClick(View v) { 23 ProgressBarAsyncTask asyncTask = new ProgressBarAsyncTask(textView, progressBar, progressBar2);//传进去需要改变的控件24 asyncTask.execute(55);//传入初始参数(这里表示将从55开始计数)25 } 26 }); 2728 } 29 }
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
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<Integer, Integer, String> { 8/*Params 启动任务执行的输入参数,比如HTTP请求的URL。由主线程中的asyncTask.execute(55);传入 9 Progress 后台任务执行的百分比。 10 Result 后台执行任务最终返回的结果,比如String。*/11private TextView textView; 12private ProgressBar progressBar; 13private ProgressBar progressBar2; 141516public ProgressBarAsyncTask(TextView textView, ProgressBar progressBar, ProgressBar progressBar2) { 17super(); 18this.textView = textView; 19this.progressBar = progressBar; 20this.progressBar2 = progressBar2; 21 } 2223/**24 * 这里的Integer参数对应AsyncTask中的第一个参数 25 * 这里的String返回值对应AsyncTask的第三个参数 26 * 该方法并不运行在UI线程当中,主要用于异步操作,所有在该方法中不能对UI当中的空间进行设置和修改 27 * 但是可以调用publishProgress方法触发onProgressUpdate对UI进行操作 28*/29 @Override 30protected String doInBackground(Integer... params) {//...表示可以传若干参数31 NetOperator netOperator = new NetOperator(); 32int i = params[0];//由主线程中的asyncTask.execute(55);传入33for (i = params[0]; i <= 100; i+=1) { 34 netOperator.operator(); 35 publishProgress(i, 100-i);//传两个参数给onProgressUpdate36 } 37return "" + i + " " + params[0].intValue() + "****";//传参数给onPostExecute38 } 3940/**41 *该方法运行在UI线程当中,并且运行在UI线程当中 可以对UI空间进行设置 42*/43 @Override 44protectedvoid onPreExecute() { 45 textView.setText("开始执行异步线程"); 46 } 4748/**49 * 这里的Intege参数对应AsyncTask中的第二个参数 50 * 在doInBackground方法当中,,每次调用publishProgress方法都会触发onProgressUpdate执行 51 * onProgressUpdate是在UI线程中执行,所有可以对UI空间进行操作 52*/53 @Override 54protectedvoid onProgressUpdate(Integer... values) {//参数来自publishProgress()55int value = values[0]; 56int value1 = values[1]; 57 progressBar.setProgress(value); 58 progressBar2.setProgress(value1); 59 textView.setText(""+value+"% "+value1); 60 } 6162/**63 * 这里的String参数对应AsyncTask中的第三个参数(也就是接收doInBackground的返回值) 64 * 在doInBackground方法执行结束之后在运行,并且运行在UI线程当中 可以对UI空间进行设置 65*/66 @Override 67protectedvoid onPostExecute(String result) {//参数来自doInBackground() return68 textView.setText("异步操作执行结束" + result); 69 } 707172 }
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 } 1516 }
原文:http://www.cnblogs.com/turtle920/p/4901713.html
内容总结
以上是互联网集市为您收集整理的android中asynctask的使用实例全部内容,希望文章能够帮你解决android中asynctask的使用实例所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。