Android AsyncTask异步处理消息机制

来源:互联网 发布:掷骰子js 编辑:程序博客网 时间:2024/04/25 15:05

AsyncTask
AsyncTask是专门用于完成非UI线程更新UI线程的任务.本质上还是开启新线程执行耗时操作,并将结果返回给UI线程
Asy是一个抽象类,其中有五个主要的方法
* 五个主要方法*
1.onPreExecute() 开启耗时操作前的准备工作
2.doInBackground(String[] params) 耗时操作,此处运行于后台线程池
返回值是onPostExecute的参数值,其中运行 publishProgress(i)方法,此方法会异步调用onProgressUpdate()方法。
3.onProgressUpdate(Integer[] values)更改进度显示
4onPostExecute(String o)最终结果显示
Note:这里有三个参数,第一个参数对应doInBackground放的参数,第二个对应onPregressUpdate的参数,第三个对应OnPostExecute
class MyAsyncTask extends AsyncTask

package com.example.mythread;import android.os.AsyncTask;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.widget.ProgressBar;import android.widget.TextView;/** * Created by 杜春慧 on 2016/4/21. */public class AsyncTaskActivity extends AppCompatActivity {    //先写一个异步内部类  有三个参数,注意每个参数的含义    //必须重写doInBackground方法,返回值是onPostExecute的参数值。所有耗时操作写在这里,参数类型是一个数组    //类里面的第一个参数是doInbackground里面的    private ProgressBar progressBar;    private TextView textView1;    private MyAsyncTask asyncTask;    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_asynctask);        progressBar = (ProgressBar) findViewById(R.id.progress);        textView1 = (TextView) findViewById(R.id.text);        //必须在主线程中调用AsyncTask,用execute方法        asyncTask=new MyAsyncTask();        asyncTask.execute();    }    public class MyAsyncTask extends AsyncTask<String, Integer, String> {        //重写四个方法  理解每个方法的作用和返回值        @Override        protected String doInBackground(String... params) {            //这个方法里面写耗时操作            int i = 0;            while (i < 100) {                i++;                publishProgress(i);                try {                    Thread.sleep(1000);                } catch (InterruptedException e) {                    e.printStackTrace();                }            }            return "下载完成";        }        @Override        protected void onPreExecute() {            //AsyncTask启动时的准备工作            super.onPreExecute();            Log.d("准备工作", Thread.currentThread().getName());          //  textView.setText("开始下载");        }        @Override        protected void onPostExecute(String s) {            //这个方法的参数值是doInbackground的返回值            textView1.setText(s);        }        @Override        protected void onProgressUpdate(Integer... values) {            //更新时的方法            textView1.setText("正在下载:"+values[0]+"%");            progressBar.setProgress(values[0]);        }    }}
0 0
原创粉丝点击