Android AsyncTask异步处理消息机制

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]);

        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值