Android备注26.Android异步任务(AsyncTask)
能够在该方法中做一些准备工作,如在界面上显示一个进度条,或者一些控件的实例化,这种方法能够不用实现。
方法运行后立即运行,该方法运行在后台线程中。这里将主要负责运行那些比較耗时的后台处理工作。能够调用 publishProgress()方法来实时更新任务进度。该方法是抽象方法,子类必须实现。
线程将调用这种方法从而在界面上展示任务的进展情况,比如通过一个进度条进行展示。
运行完毕后。onPostExecute 方法将被UI线程调用,后台的计算结果(doInBackground方法返回值)将通过该方法传递到UI线程,而且在界面上展示给用户。
onPostExecute(Result),doInBackground(Params...),onProgressUpdate(Progress...)这几个方法。须要在UI线程中实例化这个task来调用;
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjYzNzUwMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="474" height="365" alt="" style="background-color:inherit; display:inline-block; margin-top:8px; width:473.75846501128666px; height:365px">
package com.example.android_asynctask;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
public class MainActivity extends Activity {
private Button downbtn;
private TextView textView;
private ProgressBar progressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
downbtn = (Button)findViewById(R.id.download);
textView = (TextView)findViewById(R.id.text);
progressBar = (ProgressBar)findViewById(R.id.progressBar);
final DownloadTest download = new DownloadTest(textView,progressBar); //获取一个DownloadTest对象。并传递组件对象參数
downbtn.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v) {
download.execute(200);
}
}); }
}
package com.example.android_asynctask;
import android.graphics.Color;
import android.os.AsyncTask;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.TextView;
public class DownloadTest extends AsyncTask<Integer,Integer,String>
{
private TextView tv;
private ProgressBar pb;
//带參数构造方法
DownloadTest(TextView text,ProgressBar bar)
{
this.tv = text;
this.pb = bar;
}
//不带參数构造方法
DownloadTest()
{
}
/*1.onPreExecute方法
* 为子线程(后台)执行初始化相关内容
*/
protected void onPreExecute() {
tv.setVisibility(View.VISIBLE); //设置显示文本组件
pb.setVisibility(View.VISIBLE); //设置显示运行进度条
super.onPreExecute();
}
/*2.doInBackground方法
* 执行一个后台线程,该线程实现每arg0[0]毫秒调用一次onProgressUpdate方法
*/
protected String doInBackground(Integer... arg0) {
for(int i=0;i<100;i++)
{
publishProgress(i); //调用onProgressUpdate方法并传递參数i
try {
Thread.sleep(arg0[0]); //累加一次,线程休眠argo[0]毫秒
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return "完成下载"; //后台子线程执行完成后。返回的值
}
/*3.onProgressUpdate方法
* 调用publishProgress(i)时调用该方法,并传递參数i给形參values[0]*/ @Override
protected void onProgressUpdate(Integer... values) {
pb.setProgress(values[0]); //设置进度条值
tv.setText("已经下载"+values[0]+"%"); //文本组件显示提示信息
super.onProgressUpdate(values);
}
/*4.onPostExecute
* 处理后台线程得到的结果
* */
protected void onPostExecute(String result) {
pb.setVisibility(View.INVISIBLE); //隐藏进度条
tv.setVisibility(View.VISIBLE); //显示UI文本显示框组件
tv.setText(result);
tv.setTextSize(20);
tv.setTextColor(Color.RED);
super.onPostExecute(result);
}
}
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjYzNzUwMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
然后,在新创建的子线程中调用doInBackground()方法实现后台线程功能并通过publishProgress()方法调用onProgressUpdate()方法更新UI内容,最后在主线中执行onPostExecute方法来处理后台线程执行的结果。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjYzNzUwMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="386" height="250" alt="" style="background-color:inherit; display:inline-block; margin-top:8px; width:385.8520900321543px; height:250px">
版权声明:本文博客原创文章,博客,未经同意,不得转载。
最新文章
- Python中的浅拷贝 深拷贝
- jquery实现网页选项卡
- ffmpeg/ffplay vc6 源码剖析
- 源码编译安装LAMP环境及配置基于域名访问的多虚拟主机
- 设计原则 Design Principle
- MySQL导入数据非常慢的解决办法
- iOS 正则表达式-判断邮箱、手机号
- UIButton 使用imageEdgeInsets和titleEdgeInsets属性
- Sublime代码折叠
- oracle 11g R2安装报错ORA-00604及ORA-06553的原因及解决方法
- 不root的情况下 查看App的数据表
- java链接mysql添加中文和模糊查询
- More on wrapper types
- 集群/分布式环境下5种session处理策略
- PS 图像调整算法——亮度调整
- JSP(5)—Session的创建以及简单使用
- 自定义线程池reject策略
- AME_PR采购申请单通过AME审批设定和测试(案例)
- js事件的机制
- getQueryString----获取url中得参数
热门文章
- nginx简介(轻量级开源高并发web服务器:大陆使用者百度、京东、新浪、网易、腾讯、淘宝等)(并发量5w)(一般网站apache够用了,而且稳定)
- 数据类型总结——Number(数值类型)
- Node.js v10.1.0 Documentation
- iOS开发Quartz2D 十三:画板涂鸦
- window.onload,<;body onload=";function()";>;, document.onreadystatechange, httpRequest.onreadystatechang 分类: C1_HTML/JS/JQUERY 2014-08-06 16:47 558人阅读 评论(0) 收藏
- 单机/伪分布式Hadoop2.4.1安装文档 2014-07-08 21:16 2275人阅读 评论(0) 收藏
- Android自定义组件系列【5】——进阶实践(2)
- Android 如何Android中自定义Navigationbar
- 【39.29%】【codeforces 552E】Vanya and Brackets
- 【u213&&t037】修剪花卉