Android 点滴——Handler用法总结

Android Handler 机制详解 (一)用法全解 ps:这是关于Android Handler 机制的第一篇文章,主要来说一下Handler的用法,本文尽量归纳完全,如有缺漏,欢迎补充。 Handler的主要作用是切换线程,以及隐式的充当接口回调的作用,当子线程网络请求结束后,通过handler发送消息给主线程,这一点都不多说了。 常用用法 先来贴一种最常用的用法: private Handler mHandler = new Handler... 阅读详情

方法一:(java习惯,在android平台开发时这样是不行的,因为它违背了单线程模型)

刚刚开始接触android线程编程的时候,习惯好像java一样,试图用下面的代码解决问题   

new Thread( new Runnable() {
         public void run() {
              myView.invalidate();
         }            
}).start();

 

可以实现功能,刷新UI界面。但是这样是不行的,因为它违背了单线程模型:Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行。


方法二:(Thread+Handler)

查阅了文档和apidemo后,发觉常用的方法是利用Handler来实现UI线程的更新的。

Handler来根据接收的消息,处理UI更新。Thread线程发出Handler消息,通知更新UI。

Handler myHandler = new Handler() {  
          public void handleMessage(Message msg) {   
               switch (msg.what) {   
                    case TestHandler.GUIUPDATEIDENTIFIER:   
                         myBounceView.invalidate();  
                         break;   
               }   
               super.handleMessage(msg);   
          }   
     };


 

class myThread implements Runnable {   
          public void run() {  
               while (!Thread.currentThread().isInterrupted()) {    
                       
                    Message message = new Message();   
                    message.what = TestHandler.GUIUPDATEIDENTIFIER;   
                      
                    TestHandler.this.myHandler.sendMessage(message);   
                    try {   
                         Thread.sleep(100);    
                    } catch (InterruptedException e) {   
                         Thread.currentThread().interrupt();   
                    }   
               }   
          }   
     }

方法三:(java习惯。Android平台中,这样做是不行的,这跟Android的线程安全有关)

在Android平台中需要反复按周期执行方法可以使用Java上自带的TimerTask类,TimerTask相对于Thread来说对于资源消耗的更低,除了使用Android自带的AlarmManager使用Timer定时器是一种更好的解决方法。 我们需要引入import java.util.Timer; 和 import java.util.TimerTask;

public class JavaTimer extends Activity {  
  
    Timer timer = new Timer();  
    TimerTask task = new TimerTask(){   
        public void run() {  
            setTitle("hear me?");  
        }            
    };  

    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
       
         timer.schedule(task, 10000);  

    }  
}


 

方法四:(TimerTask + Handler)

通过配合Handler来实现timer功能的!

public class TestTimer extends Activity {  
  
    Timer timer = new Timer();  
    Handler handler = new Handler(){   
        public void handleMessage(Message msg) {  
            switch (msg.what) {      
            case 1:      
                setTitle("hear me?");  
                break;      
            }      
            super.handleMessage(msg);  
        }  
          
    };  

    TimerTask task = new TimerTask(){    
        public void run() {  
            Message message = new Message();      
            message.what = 1;      
            handler.sendMessage(message);    
        }            
    };  

    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
      
        timer.schedule(task, 10000);  
    }  
}


 

方法五:( Runnable + Handler.postDelayed(runnable,time) )

在Android里定时更新 UI,通常使用的是 java.util.Timer, java.util.TimerTask, android.os.Handler组合。实际上Handler 自身已经提供了定时的功能。 

private Handler handler = new Handler();  
  
    private Runnable myRunnable= new Runnable() {    
        public void run() {  
             
            if (run) {  
                handler.postDelayed(this, 1000);  
                count++;  
            }  
            tvCounter.setText("Count: " + count);  

        }  
    };

然后在其他地方调用

handler.post(myRunnable);

handler.post(myRunnable,time);


方法六:( HandlerThread)

public void onCreate(Bundle savedInstanceState) {
 
        super.onCreate(savedInstanceState);
 
 
        HandlerThread hThread=new HandlerThread("myThread");
 
        hThread.start();

 
        myhandler myhandler=new myhandler(hThread.getLooper());
 
        Message msg=myhandler.obtainMessage();
 
        msg.sendToTarget();//把 Message发送到目标对象,目标对象就是生成msg的目标对象。
 
    }
 
class myhandler extends Handler{
 
    public myhandler(Looper looper){
 
        super(looper);
 
    }
 
    public void handleMessage(Message msg) {
 
        Log.e("这是新线程", "》》》》》》》》》》》》》》》》》新线程的测试");
 
    }
 
}


 

深入解析EDID中Display Descriptor Block的配置技巧与实战应用 本文深入解析EDID中Display Descriptor Block的配置技巧与实战应用。通过剖析像素时钟、有效像素、消隐区与同步脉冲等核心参数,并结合1280x720@60Hz的实战配置案例,指导开发者如何正确为定制硬件或非标准显示器编写“身份证”,避免黑屏、分辨率异常等问题,确保显示设备完美点亮。 阅读详情

相关推荐

LRTimelapse Pro v7.0.0 激活版下载安装教程 (延迟摄影后期渲染)

LRTimelapse Pro 是一款优秀的高级延时摄影解决方案,使用将为用户提供最全面的工具和功能,从导入和组织您的延时摄影序列、视觉工作流程、在 LRTimelapse 中直接编辑和渲染、视觉去闪烁等等,功能齐全,可以使用 LRTimelapse Pro 编辑多个序列时显著提高您的效率,轻松在 LRTimelapse 中配置和使用色彩管理,进行长期延时编辑,在 LRTimelapse Pro 中使用长期工作流程。为延时编辑、关键帧、分级和渲染提供最全面的解决方案。

wyqshusan的博客 3467

android源码学习-Handler机制及其六个核心点

安卓Handler源码全面讲解

分享+记录 6万+

【RL+空战】学习记录01:jsbsim 仿真环境初次学习,F16 战机起飞

【代码】【RL+空战】学习记录01:jsbsim 仿真环境初次学习,F16 战机起飞。

weixin_41369892的博客 903

android handle笔记

Handle的特点 当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控件,进行事件分发。如果此时需要一个耗时的操作,例如:联网读取数据,或者读取本地较大的一个文件的时候,你不能把这些操作放在主线程中,如果你放在主线程中的话,界面会出现假死现象,如果5秒钟还没有完成的话,会收到Android系统的一个错误提示"强制关闭".   这个时候我们需

Alps__的专栏 799

langchain入门学习笔记

langchain快速入门

1733

Ubuntu 24.04.3 LTS 安装 OpenClaw 图文版

OpenClow安装指南

qq_17204557的博客 2552

安卓通讯开发——蓝牙

通讯(Connectivity) 除了提供标准的网络连接外,Android还提供API,让您的应用程序能够使用蓝牙、NFC、Wi-Fi、P2P、USB和SIP等协议与其他设备进行连接和交互。 In addition to providing standard network connectivity, Android provides APIs to let your app connect ...

旧日灯塔 9647

京东技术产品经理面试全记录:从简历投递到一面45分钟实战复盘

本文深度复盘京东技术产品经理面试全流程,从策略准备、思维题拆解、项目阐述到反问谈判,提供了一套可演练的求职策略体系。文章强调该岗位需具备横跨技术与商业的枢纽能力,并通过“QQ分组vs微信标签”等案例,剖析了产品思维与结构化表达在面试中的关键作用,助力候选人将紧张转化为掌控感。

weixin_29275257的博客 630

Handle机制详解

一、Android消息机制一          Android 有一种叫消息队列的说法,这里我们可以这样理解:假如一个隧道就是一个消息队列,那么里面的每一部汽车就是一个一个消息,这里我们先忽略掉超车等种种因素,只那么先进隧道的车将会先出,这个机制跟我们android 的消息机制是一样的。 角色描述 1. Looper:(相当于隧道) 一个线程可以产生一个Looper 对象,由它来

听闻的博客 5448

Chamfer Loss

ChamferLoss是一种常用于3D点云(pointcloud)处理的损失函数,特别是在点云生成和对齐任务中。它的目的是度量两个点集之间的相似度,特别是在点云重建、配准或生成等任务中,常用于优化模型使得生成的点云更接近真实的点云。

夜空中明亮的星的专栏 455

SAP CPI 之使用国密算法实现SM系列算法加解密

System.out.println("SM2-私钥:" + privateKey);System.out.println("SM2-公钥:" + publicKey);System.out.println("SM2-密文:" + encrypts);System.out.println("SM2-明文:" + data2);新建groovy,通过import之后,调用jar包中的方法。在CP中导入jar包,选择Upload,选中导入的jar包。的密钥和向量值,不安全!的公钥和私钥,不安全!

u012830826的博客 1335

Handler消息传递机制(子线程中传递new Handler和主线程中new Handle传递消息)

Android消息循环机制: http://blog.csdn.net/crazy1235/article/details/51707527 Android Message.obtain() 和Handler.obtainMessage()的区别 --http://www.cnblogs.com/ZhuRenWang/p/4937785.html Android的消息机制-Message机制...

ShareUs的专栏 7556

[系统安全] 一.什么是逆向分析、逆向分析基础及经典扫雷游戏逆向

娜璋AI安全之家于2020年8月18日开通,将专注于Python和安全技术,主要分享Web渗透、系统安全、CVE复现、威胁情报分析、人工智能、大数据分析、恶意代码检测等文章。真心想把自己近十年的所学所做所感分享出来,与大家一起进步。 系统安全系列作者将深入研究恶意样本分析、逆向分析、攻防实战等,通过在线笔记和实践操作的形式分享与博友们学习,希望能与您一起进步。第一篇文章先带领大家学习什么是逆向分析,然后详细讲解逆向分析的典型应用,接着通过OllyDbg工具逆向分析经典的游戏扫雷,再通过Cheat Engin

杨秀璋的专栏 2万+

【Android】Handler用法及原理解析

Handler是用于在不同线程之间进行消息传递的机制。它与Looper和一起工作,帮助在不同线程间传递和处理消息,特别是在主线程与子线程之间进行通信。

Patrick_yuxuan的博客 4062

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Android Handler用法

Android UI操作并非线程安全。因此,请不要在工作线程(即子线程)中操纵界面。您可以通过界面线程对界面进行所有操作。

Watom_663的博客 2618

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Android开发中Handler的简单用法

Android开发中Handler的简单用法 背景 在写自己的小项目快汇-一个简单的汇率转换工具时,其中有一个功能点是监听点击按钮事件之后发送获取汇率的网络请求,并刷新界面中的RecyclerView。调试报错,研究了一下是典型的子线程刷新UI导致报错。 Only the original thread that created a view hierarchy can touch its vie...

程序猿—从入门到上道 2811

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

安卓的Handler机制

Android Handler机制解析 Handler机制是Android实现线程间通信的核心框架,主要由四个关键组件构成: Handler:消息发送和处理的桥梁,负责发送消息(sendMessage)和处理消息(handleMessage) Message:消息数据结构,包含what、obj、arg1/arg2等字段 MessageQueue:消息队列,负责消息的存储和管理 Looper:消息循环,从队列中取出消息并分发 每个线程只能拥有一个Looper,通过ThreadLocal保证线程隔离。使用Han

weixin_44078411的博客 1170

Android Studio——android中handler用法总结

一、Handler的定义: Handler主要接收子线程发送的数据, 并用此数据配合主线程更新UI,用来跟UI主线程交互用。比如可以用handler发送一个message,然后在handler的线程中来接收、处理该消息,以避免直接在UI主线程中处理事务导致影响UI主线程的其他处理工作,Android提供了Handler作为主线程和子线程的纽带;也可以将handler对象传给其他进程,以便在其他进程...

qq_37746927的博客 4381

android的handler使用方法,android中handler用法总结

一、Handler的定义:Handler主要接收子线程发送的数据, 并用此数据配合主线程更新UI,用来跟UI主线程交互用。比如可以用handler发送一个message,然后在handler的线程中来接收、处理该消息,以避免直接在UI主线程中处理事务导致影响UI主线程的其他处理工作,Android提供了Handler作为主线程和子线程的纽带;也可以将handler对象传给其他进程,以便在其他进程中...

weixin_36252618的博客 5275

带你深入了解Android Handler的用法

在 Android 开发中,使用多线程是非常常见的,但是在 Android 中,有一个 UI 线程,也就是主线程,所有的UI操作必须在主线程中完成,否则就会抛出 CalledFromWrongThreadException 异常,这个异常的原因是 Android 不允许在子线程中直接访问 UI 控件。而 Handler 的主要作用就是用于子线程与主线程之间进行通讯,在应用程序内传递消息、更新 UI 等各种场景下,都可以使用 Handler 来实现。

Dakaring的专栏 6227

Android中handler的用法实例

Android中handler的用法实例 Handler主要用于不同线程之间的通信,尤其是普通线程通过handler机制发送message给主线程(UI线程)来更新UI,或者是把耗时的操作发送给service让service来执行。 Handler的主要功能就是,发送消息和处理消息 主要用来实现异步回调功能,在新线程中做完一个费时的操作后,启动这个回调函数。

Programmer Training 4522

Android: Handler 的用法详解

Handler 是 Android 中用于线程间通信的重要机制,主要用于在不同线程之间发送和处理消息。

qq_39460057的博客 1275

安卓handler的用法,handler举例

原帖跳转: link   一、Handler的定义:     Handler主要接收子线程发送的数据, 并用此数据配合主线程更新UI,用来跟UI主线程交互用。比如可以用handler发送一个message,然后在handler的线程中来接收、处理该消息,以避免直接在UI主线程中处理事务导致影响UI主线程的其他处理工作,Android提供了Handler作为主线程和子线程的纽带;也可以将handler对象传给其他进程,以便在其他进程中通过handler给你

ruiruiddd的博客 378

android学习之路 Handler用法

Android之Handler用法总结 方法一:(java习惯,在android平台开发时这样是不行的,因为它违背了单线程模型) 刚刚开始接触android线程编程的时候,习惯好像java一样,试图用下面的代码解决问题    new Thread( new Runnable() { public void run() { myView.i

Solo_two的博客 613

Android中Handler的机制与用法详解

一、很多初学者对安卓的的Handle的不是很明白,在介绍handle之前,我们首先要了解下面几个概念: 1、 Message 消息,理解为线程间通讯的数据单元。例如后台线程在处理数据完毕后需要更新UI,则可发送一条包含更新信息的Message给UI线程。 2、 Message Queue 消息队列,用来存放通过Handler发布的消息,按照先进先出执行。 3、 Handler Handler是Message的主要处理者,负责将Message添加到消息队列以及对消息队列中的Message进行处理。 4、 .

AdolfQiu的博客 1968
上一篇: Android 点滴——AsyncTask
下一篇: android 点滴——AsyncTask 和 Handler 比较
WYYZ5
博客等级 码龄16年 19粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值