Android消息处理机制

1. 消息队列 Handler

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. Handler的消息传递机制

在这里插入图片描述
在这里插入图片描述
arg1\arg2传递int类型的值 obj传递对象

3. Handler的编程接口

在这里插入图片描述

4. Handler编程思路

1\主线程Activity创建Handler

private Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            //处理消息,运行在创建它的线程中
            switch (msg.what){
                case 0x0001:
                    int index = msg.arg1;
                    test.setText(index+"");
                    break;
            }
        }
    };

2\实现子线程run()方法重写

public void login(View view){
        //使用线程完成
        //工作线程是一个匿名类
        new Thread(){//子线程不可更新UI线程中的控件属性
            @Override
            public void run() {
                for(int i=0;i<100;i++){
                    Message msg = new Message();
                    msg.what = 0X0001;//消息的what是消息标识,必须有
                    msg.arg1 = i;
                    handler.sendMessage(msg);
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }.start();
    }

---------------------------------------------------------------------------------------------------------------------------------

5. AsyncTask异步类

在这里插入图片描述

6. AsyncTask编程思路

1\创建方法继承AsyncTask,主线程中直接调用该方法即可实现

class MyTask extends AsyncTask<Void, Integer, Void>{

        @Override
        /**
         * 运行在后台,相当于是Thread中的run()方法
         * 运行在子线程中的方法
         */
        protected Void doInBackground(Void... voids) {
            for(int i=0;i<=100;i++){
                publishProgress(i);//传参数, 自动调用onProgressUpdate()方法
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            return null;
        }

        @Override
        /**
         * 进度指示的方法
         * 运行在主线程中,在这个方法中可以直接更新控件的属性
         */
        protected void onProgressUpdate(Integer... values) {
            int num = values[0];
            test.setText("num:"+num);//更新主线程中UI控件属性
            super.onProgressUpdate(values);
        }

        @Override
        /**
         * 运行在主线程中,当后台运行结束,自动调用该方法
         */
        protected void onPostExecute(Void unused) {
            Toast.makeText(MainActivity.this,"子线程运行结束",Toast.LENGTH_LONG).show();
            super.onPostExecute(unused);
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值