Android学习(9)Handler_异步回调机制(使用Handler更新ProgressBar)

Android学习(9)Handler_异步回调机制(使用Handler更新ProgressBar)

Handler机制:
Handler机制即异步回调机制,也可以理解为线程间的消息机制,可以用Handler实现线程间的通信,也可以用Handler实现多线程应用

1.布局文件,布局一个ProgressBar和两个Button,点击按钮开始和停止

activity_handler.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.test.androidtest.HandlerActivity">

    <ProgressBar
        android:id="@+id/pbHd"
        style="@style/Base.Widget.AppCompat.ProgressBar.Horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <Button
    android:id="@+id/btnAddHd"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="开始Handler"/>
    <Button
        android:id="@+id/btnDecHd"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="停止Handler"/>
</LinearLayout>

2.在Activity中创建Handler和线程,实现ProgressBar自动增长

public class HandlerActivity extends AppCompatActivity implements View.OnClickListener{

    private Button add,dec;
    private ProgressBar pb;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_handler);
        add = (Button)findViewById(R.id.btnAddHd);
        dec = (Button)findViewById(R.id.btnDecHd);
        pb = (ProgressBar)findViewById(R.id.pbHd);
        add.setOnClickListener(this);
        dec.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btnAddHd:
                //通过POST方法启动runnable
                handler.post(runnable);
                break;
            case R.id.btnDecHd:
                //移除掉runnable
                handler.removeCallbacks(runnable);
                break;
        }
    }
    //创建Handler
    Handler handler = new Handler(){
        //接收消息的方法
        public void handleMessage(Message msg) {
            //把进度条的值设置为消息队列传过来的值:arg1
            pb.setProgress(msg.arg1);
            System.out.println("getMessage="+msg.arg1);
            //每增加一次,就再执行一次发送消息的线程
            handler.post(runnable);、
            //如果进度条值为100,就停止线程
            if (msg.arg1 == 100){
                handler.removeCallbacks(runnable);
            }
        };
    };
    //实例化一个Runnable线程
    Runnable runnable = new Runnable() {
        int i = 0;
        @Override
        public void run() {
            //每次增长10
            i += 10;
            //Message是Android系统所提供的(消息对象)
            Message message = handler.obtainMessage();
            //arg1的优点:它是系统提供的,并且会节省系统资源的消耗
            message.arg1 = i;
            System.out.println(i);
            try{
                //每一秒执行一次
                Thread.sleep(1000);
            }catch (InterruptedException e){
                e.printStackTrace();
            }
            //消息队列,向handler发送消息
            handler.sendMessage(message);
        }
    };
}

这里写图片描述


声明:
1.知识点来源于《网易云课堂》——《Android基础视频教程》
2.本文只用于本人自身学习记录,如有侵权,请立即通知本人更改或删除

猜你喜欢

转载自blog.csdn.net/qq_40740256/article/details/82468348
今日推荐