<Android学习笔记一>——AsyncTask实现

1、首先介绍一下同步和异步的概念
通俗的来讲:同步就是发出一个请求后什么事都不做,一直等待请求返回后才会继续做事;异步就是发出请求后继续去做其他事,这个请求处理完成后会通知你,这时候就可以处理这个回应了。
实现异步任务的方式有很多种,常用的有Handler + Message来实现、使用AsyncTask类、调用runOnUiThread()方法,今天主要介绍AsyncTask异步类的使用。

2、AsyncTask

通常我们需要用一个异步任务的机制解决在子线程里面刷新UI的问题。异步任务类AsyncTask<Params,Progress,Result>,是一个抽象类,继承它时,必须实现相应的方法。

其中参数的含义为:
Params:是指调用execute()方法时传入的参数类型和doInBackgound()的参数类型。
Progress:是指更新进度时传递的参数类型,即publishProgress()和onProgressUpdate()的参数类型。
Result:是指doInBackground()的返回值类型

异步任务类中常用的几个方法:
execute():在UI 线程中调用 ,开始执行这个异步任务。
doInBackground():是继承AsyncTask必须要实现的,运行于后台,耗时的操作可以在这里做。
publishProgress():更新进度,给onProgressUpdate()传递进度参数
onProgressUpdata():在publishProgress()调用完被调用,更新进度

需要注意的地方:
1) Task的实例必须在UI 线程中创建
2) 不要手动的调用onPreExecute(), onPostExecute(Result),doInBackground(Params…), onProgressUpdate(Progress…)这几个方法,需要在UI线程中实例化这个task来调用。

下面是一个小小的Demo,供理解AsyncTask使用,点击Button,下面的TextView是间隔每秒中产生一个随机数。

package com.example.xiaofeng1015.asycntask;

import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import java.util.Random;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private Button btnStart;
    private TextView textView;
    // 定义一个异步任务
    private MyAsycnTask myAsycnTask;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnStart = (Button) findViewById(R.id.btnStart);
        textView = (TextView) findViewById(R.id.tv01);
        myAsycnTask = new MyAsycnTask();

        btnStart.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        // 开启异步任务,也可doInBackground函数中传递数据
        myAsycnTask.execute();
    }

    class MyAsycnTask extends AsyncTask<Integer, Integer, String> {

        // 工作于UI线程中,用于界面的更新
        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);
            int value = values[0];
            // 更新UI界面
            textView.setText(Integer.toString(value));

        }

        // 首先启动的后台程序,在工作线程中执行
        @Override
        protected String doInBackground(Integer... params) {
            while (true) {
                // 产生随机数,以当前时间为种子
                Random random = new Random(System.currentTimeMillis());
                int value = random.nextInt();
                // 启动onProgressUpdate函数
                publishProgress(value);
                try {
                    // 延迟1s
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

结果显示:
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值