hanlder 机制原理和使用

1,hanlder  介绍

    【1】介绍:

        消息机制: handler是更新UI界面的机制,也是消息处理的机制,我们可以发送消息,也可以处理消息

   【2】handler的出现:

        问题:ANR :application not response  应用无响应

            

             当应用程序在主线程(main线程 ui线程)进行耗时(比如连接网络,拷贝大的数据 )的操作 一般5秒钟无响应就会报ANR为了避免出现ANR我们把耗时操作放在子线程去做,但是在子线程去更新UI会报错误

10-06 02:17:57.778: W/System.err(1596): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

只有在主线程才能更新UI,我们要开始用Handler了。

【3】hanlder 简单使用:

A,开启子线程处理耗时操作,使用handler传输数据:

// 实现按钮点击事件

    public void click(View v) {

        

        //创建一个子线程

        new Thread() {

            public void run() {

                try {

                    if(xxxx){

                        // 把耗时的操作放到子线程里面 bitmap 是要传输的数据

                        Bitmap bitmap = BitmapFactory.decodeStream(in);

                        // 获取message对象,不去 new Message() 使用obtain方法是为了避免创建过多的对象

                        Message msg = Message.obtain();

                        // 数据塞进msg里面

                        msg.obj = bitmap;

                        // 给msg 加一个标识在handler 可以分类进行逻辑处理

                        msg.what = REQUESTSUCESS;

                        handler.sendMessage(msg);

                    }else {

                        Message msg = Message.obtain();

                        msg.what = REQUESTFAIL;

                        handler.sendMessage(msg);

                    }

                } catch (Exception e) {

                    e.printStackTrace();

                    Message msg = Message.obtain();

                    msg.what = REQUESTEXCEPTION;

                    handler.sendMessage(msg);

                }

            }

        }.start();

        

        

 

B,创建handler成员变量,接收数据进行UI操作:

    protected static final int REQUESTSUCESS = 0;  

    protected static final int REQUESTFAIL = 1;

    protected static final int REQUESTEXCEPTION= 2;

    //定义一个handler

    private Handler handler = new Handler(){

        //在这个方法里面处理消息

        public void handleMessage(android.os.Message msg) {

            

            switch (msg.what) {

            case REQUESTSUCESS:

                //[1]获取我们携带的数据

                Bitmap bitmap = (Bitmap) msg.obj;

                //[2]把btimap展示到imagview上

                iv.setImageBitmap(bitmap);

                break;



            case REQUESTFAIL:

                iv.setImageBitmap(null);

                Toast.makeText(getApplicationContext(), "图片不存在", 1).show();

                break;

            case REQUESTEXCEPTION:

                iv.setImageBitmap(null);

                Toast.makeText(getApplicationContext(), "图服务器忙", 1).show();

                break;

            }

        };

    };

 

2,hanlder 原理:

    【1】相关方法和类

          looper类: 消息封装的载体。内部包含一个MessageQueue,所有的Handler发送的消息都走向这个消息队列

        Looper.Loop方法,就是一个死循环,不断地从MessageQueue取消息,如果有消息就处理消息,没有消息就阻塞。

          MessageQueue, 存储消息的容器是一个消息队列,添加消息,处理消息

 

A,looper.loop方法:

   B,Message 类中的变量 msg.target 实际调用的是Handler

C,Handle处理系统消息

 

流程:  handler.sendMessage(msg); 发送一个消息,消息进入MessageQueue 消息队列里,looper.loop无限循坏去监听MessageQueue,有消息就调用HandlerMessage,没有就阻塞。

 

总结: handler负责发送消息,Looper负责接收handler发送的消息,并把消息回传给handler自己。

        

遗留问题:不new message  用obtain方法 避免重复创建为对象导致内存溢出

 

 

对你们有帮助,请点赞支持一下。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兴帅_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值