安卓开发:AsyncTask异步消息处理机制使用

来源:互联网 发布:五线谱编辑软件 mac 编辑:程序博客网 时间:2024/04/27 08:23

安卓除了有Handler类来处理异步消息处理机制,还有另一套异步消息处理机制。我们可以借助AsyncTask类实现异步消息处理。
查看api可以知道AsyncTask是抽象类,我们需要用子类继承它。

实例情景:有一个Button按钮,点击该按钮,相当于是开启了任务。有一个TextView控件,显示进度【从0开始,每过1s,进度值+10,到100,任务停止】
效果如下:

这里写代码片

这里写图片描述

新建:activity_main.xml:

<?xml version="1.0" encoding="utf-8"?><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"    tools:context="com.example.aiden.example.MainActivity">    <Button        android:id="@+id/button"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="修改UI" />    <TextView        android:id="@+id/textView"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="当前进度" /></LinearLayout>

新建MainActivity.java:

package com.example.aiden.example;import android.app.Activity;import android.os.AsyncTask;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends Activity implements View.OnClickListener {    private Button button;    private TextView textView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        this.setContentView(R.layout.activity_main);        button = (Button) this.findViewById(R.id.button);        textView = (TextView) this.findViewById(R.id.textView);        button.setOnClickListener(this);    }    @Override    public void onClick(View v) {        if (v == button) {            // 调用execute函数,启动任务            new MyAsyncTask().execute();        }    }    // 第一个参数是指执行该MyAsyncTask传入的参数    // 第二个参数是指执行该MyAsyncTask的进度    // 第三个参数是指执行该MyAsyncTask的结果    public class MyAsyncTask extends AsyncTask<Void, Integer, Boolean> {        int percent = 0;        @Override        // 在执行MyAsyncTask前调用        protected void onPreExecute() {            textView.setText("当前进度为:0");        }        @Override        // 后台任务        protected Boolean doInBackground(Void... params) {            try {                while (true) {                    percent += 10;                    publishProgress(percent);                    Thread.sleep(1000);                    if (percent >= 100)                        break;                }            } catch (Exception e) {                return false;            }            return true;        }        @Override        // 修改UI        protected void onProgressUpdate(Integer... values) {            textView.setText("当前进度为:" + percent);        }        @Override        // 执行MyAsyncTask完毕后返回的结果        protected void onPostExecute(Boolean result) {            if (result)                Toast.makeText(MainActivity.this, "下载完成", Toast.LENGTH_LONG).show();            else                Toast.makeText(MainActivity.this, "下载失败", Toast.LENGTH_LONG).show();        }    }}

由于代码有详细的注释,可以很好的理解。我们可以把AsyncTask当作是异步消息处理机制【Handler】的封装。

2 0
原创粉丝点击