
AndroID AsyncTask是一个轻量级的异步任务处理类
常见的使用步骤->创建一个继承自AsyncTask类的异步任务处理类
(AsyncTask<Params,Progress,Result>
Params启动任务执行的输入参数,比如一组URL
Progress后台任务执行的百分比
Result执行完任务后的返回结果)
class MyAsyncTask extends AsyncTask<Integer,Integer,String> { @OverrIDe protected String doInBackground(Integer... params) { //运行在工作线程 //在onPreExecute方法执行完成后马上执行,负责执行 //耗时的后台处理任务,可调用publishProgress方法实 //时更新任务进度 } @OverrIDe protected voID onPreExecute() { //运行在UI线程 //在执行后台耗时 *** 作之前,通常用于一些初始化 *** 作,比如进度条显示 } @OverrIDe protected voID onProgressUpdate(Integer... values) { //运行在UI线程 //在dobackground方法中,每次调用publishProgress方法都会触发该方法 }}
->在UI线程创建MyAsyncTask实例
->在UI线程中调用mAsyncTask.execute()
一个完整的例子
MainActivity
package com.example.myfirstapp;import androIDx.appcompat.app.AppCompatActivity;import androID.os.AsyncTask;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 { private TextVIEw txtTitle; private Progressbar pgbar; private button btnupdate; @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_main); txtTitle = (TextVIEw)findVIEwByID(R.ID.txtTitle); pgbar = (Progressbar)findVIEwByID(R.ID.pgbar); btnupdate = (button)findVIEwByID(R.ID.btnupdate); btnupdate.setonClickListener(new VIEw.OnClickListener() { @OverrIDe public voID onClick(VIEw v) { MyAsyncTask myTask = new MyAsyncTask(txtTitle,pgbar); myTask.execute(1000); } }); }}class DelayOperator { //延时 *** 作,用来模拟下载 public voID delay() { try { Thread.sleep(1000); }catch (InterruptedException e){ e.printstacktrace();; } }}class MyAsyncTask extends AsyncTask<Integer,String>{ private TextVIEw txt; private Progressbar pgbar; public MyAsyncTask(TextVIEw txt,Progressbar pgbar) { super(); this.txt = txt; this.pgbar = pgbar; } //该方法不运行在UI线程中,主要用于异步 *** 作,通过调用publishProgress()方法 //触发onProgressUpdate对UI进行 *** 作 @OverrIDe protected String doInBackground(Integer... params) { DelayOperator dop = new DelayOperator(); int i = 0; for (i = 10;i <= 100;i+=10) { dop.delay(); publishProgress(i); } //i + params[0].intValue() return ""; } //该方法运行在UI线程中,可对UI控件进行设置 @OverrIDe protected voID onPreExecute() { txt.setText("开始执行异步线程~"); } //在dobackground方法中,每次调用publishProgress方法都会触发该方法 //运行在UI线程中,可对UI控件进行 *** 作 @OverrIDe protected voID onProgressUpdate(Integer... values) { pgbar.setProgress(values[0].intValue()); }}
布局代码
activity_main
<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:orIEntation="vertical" tools:context=".MyActivity"> <TextVIEw androID:ID="@+ID/txtTitle" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" /> <!--设置一个进度条,并且设置为水平方向--> <Progressbar androID:layout_wIDth="fill_parent" androID:layout_height="wrap_content" androID:ID="@+ID/pgbar" style="?androID:attr/progressbarStyleHorizontal"/> <button androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:ID="@+ID/btnupdate" androID:text="更新progressbar"/></linearLayout>总结
以上是内存溢出为你收集整理的Android AsyncTask详解全部内容,希望文章能够帮你解决Android AsyncTask详解所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)