首页 > 其他分享 >android Handler应用

android Handler应用

时间:2023-11-11 22:25:17浏览次数:29  
标签:Handler ui 消息 应用 new 线程 android Message

android在运行时改变ui需要在ui线程中修改才行,不然就会报错或者无法启动应用。

我们怎么可以做事不管呢?

既然不能在ui线程外的地方运行修改ui的代码,我们可以用Handler解决这个问题,

而Handler消息机制用于同进程的线程间通信,通过发送Message我们可以有效的避开报错。

那怎么写Handler才能帮我们修改指定的ui呢?

(^U^)ノ~YO 问对人了,我知道哦!!!

相关概念解释

  1. Message :代表一个行为what或者一串动作Runnable, 每一个消息在加入消息队列时,都有明确的目标Handler

  2. ThreadLocal: 线程本地存储区(Thread Local Storage,简称为TLS),每个线程都有自己的私有的本地存储区域,不同线程之间彼此不能访问对方的TLS区域。ThreadLocal的作用是提供线程内的局部变量TLS,这种变量在线程的生命周期内起作用,每一个线程有他自 己所属的值(线程隔离)

  3. MessageQueue (C层与Java层都有实现) :以队列的形式对外提供插入和删除的工作, 其内部结构是以双向链表的形式存储消息的

  4. Looper (C层与Java层都有实现) :Looper是循环的意思,它负责从消息队列中循环的取出消息然后把消息交给Handler处理

  5. Handler :消息的真正处理者, 具备获取消息、发送消息、处理消息、移除消息等功能

在我学习Handler时遇到了是否多的问题,在我的不断调试下我发现了。

两种可以有效修改ui的方法:

方法一:

重写Handler的handleMessage方法:

//直接写在类中
private final Handler handler = new Handler(Looper.myLooper()){
    @Override
    public void handleMessage(@NonNull Message msg) {
        super.handleMessage(msg);
                //在这写修改ui的代码
    }
};

调用:

handler.sendEmptyMessage(0);//写在非ui线程的地方

方法二:

new Handler().post(new Runnable() {//可以写在非ui线程的地方
                @Override
                public void run() {
                    //使用post方法更新UI
                }
            });

标签:Handler,ui,消息,应用,new,线程,android,Message
From: https://www.cnblogs.com/wuqiyang/p/17826450.html

相关文章

  • android ProgressBar样式
    **实现进度条由浅黄(#ffff33)到深黄色(#ff6600)的渐变样式。****与进度条自动从0加载到99,进度条每次加1**-`android:max`:进度条的最大值。-`android:progressDrawable`:设置轨道对应的`Drawable`对象。-style="@android:style/Widget.ProgressBar.Horizontal"设置**水平进度条*......
  • android 页面切换
    案例演示:首先有MainActivity与LoginActivity两个ActivityMainActivity.javapublicclassMainActivityextendsAppCompatActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setConte......
  • Android程序员自救进阶指南
    前言今天摸鱼的时候看到有人36岁在深圳开起了出租车的新闻,而且对方毕业于华南师范大学,曾在大厂当过主管,因为疫情而毕业,至今2年都没能回到主业,因为上有父母,下有孩子,需要养家糊口,不愿跑美团,认为没面子,所以开起了出租车。这话不得不再次刷新了我的三观,原来开出租车还能瞧不起跑外卖的......
  • 双非18线小城市二本,成功上岸阿里P7(Android岗)
    前言双非一本、二本能进大厂么?能!自我介绍我,双非18线小城市二本,今年上岸阿里的P7岗(Android)但是作为一个错过秋招,学历不漂亮,实习转正被忽悠,从18线小城市到北京实习,投了上百份简历的苦逼双非学生,还是想说一句:进大厂太难难难难了!!!据说有6成的大学生都相信在毕业十年内能年薪过百万,而......
  • Go实现Zabbix企业微信应用通知告警
    企业微信https://work.weixin.qq.com/企业微信->应用管理->创建应用个人微信也能接收企业微信信息我的企业->微信插件->扫码关注特殊说明之前企业微信只需要调用接口就能实现微信应用通知,最近改版,变得比较复杂1:需要配置可信IP才能发2:配置可信IP前需要先设置可信域名......
  • SpringSecurity successHandler方法使用自定义Handler登录成功,302问题
    一开始我自定义了成功和失败两个Handler,在进行调试的时候发现失败的没有问题,但是登录成功的话走的是某人的重定向而不是我自定义的protectedvoidconfigure(HttpSecurityhttp)throwsException{http.csrf().disable().headers().frameOptions().disable()......
  • vue 项目改为微应用后,原本的项目地址打不开为什么?
    当将Vue项目改为微应用之后,需要进行一些配置才能正常运行。首先,确保微应用项目的依赖中已经添加了qiankun,并在主应用的main.js中进行了相关配置。可以参考qiankun官方文档来配置主应用。在进行部署时,需要注意以下几点:跨域配置:微应用可能会存在跨域请求的问题。在部署时,需确保主应用......
  • UWB人员定位系统的原理与应用
    人员定位系统源码uwb高精度定位系统源码 室内定位系统uwb人员定位系统基于什么原理?UWB人员定位系统基于超宽带(UltraWideBand)技术进行位置定位。它利用超短脉冲信号,通过测量信号的到达时间差和信号强度等信息,实现对目标位置的定位。UWB技术具有高精度、低耗电、易于部署和使用......
  • 非web应用下快速搭建Spring环境
    Spring诞生之初就不是为web项目定制的。首先我们要弄明白常用的web项目和非web项目的区别在哪儿?无疑是服务启动和执行逻辑触发的方式:web项目需要依赖web容器来启动,通过http请求来触发相关的服务;非web项目则不需要依赖web容器来启动,它可以是自启动的;添加Spring依赖<properti......
  • ReactNative进阶(十):WebView 应用详解
    (文章目录)一、WebView组件介绍使用WebView组件可通过url来加载显示一个网页,也可以传入一段html代码来显示。下面对其主要属性和方法进行介绍。1.主要属性source:在WebView中载入一段静态的html代码或是一个url(还可以附带一些header选项);automaticallyAdjustCon......