Android入门开发之 Handler使用

Android入门开发之Handler的使用 Handler是Android中的一个类,用于处理消息和线程之间的通信。使用Handler可以实现线程之间的通信,例如在后台线程中执行耗时操作后,将结果传递给UI线程进行更新。在Android应用程序开发中,Handler是一个重要的工具,用于在不同线程之间进行通信和任务调度。然后在Handler的构造函数中传入HandlerThread的Looper对象,以将Handler关联到子线程的消息队列中。在主线程中创建的Handler将与UI线程的消息队列关联,可以用于更新UI。可以使用Handler的。 阅读详情

    Android提供了一个异步的消息回调机制Handler,  它负责发送消息和处理线程消息队列中的消息及runnable对象 

   Handler实例都是与一个线程和该线程的消息队列一起使用,一旦创建了一个新的handler实例,系统就把该实例与一个线程和该线程的消息队列捆绑起来,这将可以发送消息和runnable对象给该消息队列,并在消息队列出口处处理它们。

     Handler默认使用当前的线程RunLoop,  但是也可以通过它的构造函数来指定某个线程的runloop, 或者使用专用的HandlerThread。

    必须要注意的是, 使用Handler的线程中,必须实现了Runloop消息循环,否则会产生运行异常。 

    通常情况下,如果我们在主线程使用Handler, 则不需要我们主动去创建runloop, 因为android系统为自动为activity主线程创建一个runloop。 

    同样我们可以在一个特殊的子线程中使用Handler,而不必去创建runloop。这个特殊子线程就是HandlerThread, 查看其源码,我们可以发现,它也在run方法中实现了runloop。

 


  下面就介绍Handler的几种使用场景和用法:

 1. 在主线程中使用Handler

      主线程中使用Handler相对简单, 下面的示例代码实现了在主线程中创建Handler对象,启动一个runable方法去刷新进度条。代码如下:

				      //在主线程中创建一个Handler对象
                                       Handler  handler = new Handler()
					{
						public void handleMessage(Message msg)
						{
							firBar.setProgress(msg.arg1);
							handler.post(updateThread);
							
							Log.v("thread----", Thread.currentThread().getName());
						}
					};
					handler.post(updateThread);  //去运行

	       //创建一个runable去刷新进度条
               Runnable updateThread = new Runnable() {
		
		@Override
		public void run() {
			// TODO Auto-generated method stub
			if ( i>= 100) {
				handler.removeCallbacks(updateThread);
				return;
			}
				

			
			i += 10;
			
			Message msg = handler.obtainMessage();
			msg.arg1 = i;
			
			try {
				Thread.sleep(1000);    //线程暂停1s
			} catch (InterruptedException e) {
				// TODO: handle exception
				e.printStackTrace();
			}
			
			handler.sendMessage(msg);
			handler1.sendEmptyMessage(0);
			
		}
	};


2.  在普通的子线程中使用Handler

     示例代码如下:

	//创建一个子线程,在其中使用Handler
	class MyThread extends Thread
	{
		
			public void run() {
				Looper.prepare();
				 handler1 = new Handler()//Looper.getMainLooper()
				{
				    public void handleMessage(Message msg)
				    {
				    	Log.v("SubThread",Thread.currentThread().getName());
				    	
				    	// 这里执行耗时操作,不会影响到UI主线程
				    	for (int i = 0; i < 1000000000; i++) {
							
						}
				    }
					
				};
				
				Looper.loop();
			}
	
	}


3.  在HandlerThread线程中使用Handler

     

				HandlerThread handlerThread = new HandlerThread("handlerThread");
				handlerThread.start();
				
				//这里获取到HandlerThread的runloop
				MyHandler myHandler = new MyHandler(handlerThread.getLooper());


安卓开发实战项目合集:从入门到精通的完整学习资源 Android系统基于Linux内核,采用分层架构设计,自下而上包括Linux内核层、硬件抽象层(HAL)、系统运行库、应用框架层(Application Framework)和应用层。开发者主要与四大核心组件交互:Activity(界面载体)、Service(后台任务)、(广播接收)、(数据共享)。理解这些组件的生命周期与通信机制是开发高质量App的基础。// 示例:最简单的Activity声明@Override// 绑定XML布局该类需在。 阅读详情

相关推荐

802.11ax 的OFDMA资源分配详解

802.11ax 引入的最重要的技术就是OFDMA。OFDMA中引入了RU(资源块)概念,也就是20Mhz/40Mhz/80Mhz/160Mhz的带宽可以切割成不同尺寸的RU,分配给不同的用户使用,这样就大大提高了频谱资源的利用率。 常见的RU尺寸有26/52/102/242/484/996,单位是子载波,每个子载波是78.125Khz,这样20Mhz的带宽可以划分为如下图所示的不同RU大小。 按照11ax规范的要求,上下行的数据传输都可以由AP来统一调度,这样上下行的OFDM...

weixin_43408952的博客 1万+

Android Handler使用详解

Handler负责发送消息,Looper负责接收Handler发送的消息,并直接把消息回传给handler自己,MessageQueue就是一个存储消息的容器。

小旭的专栏 7667

保姆级教程:在ROS Noetic下,手把手教你将自定义A*全局规划器打包成插件(附避坑指南)

本文提供了一份详细的ROS Noetic下自定义A*全局规划器插件开发指南,涵盖从环境准备、算法优化到插件配置与调试的全流程。通过实战案例和避坑技巧,帮助开发者高效实现机器人导航中的全局路径规划,特别适合需要优化ROS导航栈的开发者。

weixin_29168675的博客 285

android handler使用

Handler:是一个消息分发对象,进行发送和处理消息,并且其 Runnable 对象与一个线程的 MessageQueue 关联。 作用:调度消息,将一个任务切换到某个指定的线程中去执行。 为什么需要 Handler? 子线程不允许访问 UI 假若子线程允许访问 UI,则在多线程并发访问情况下,会使得 UI 控件处于不可预期的状态。 传统解决办法:加锁,但会使得UI访问逻辑变的复杂,其

Warden032的博客 1015

安卓端目标检测模型部署血泪史:从NCNN/TFLite/MNN全军覆没到Torchscipts终见光明

公司需在Android设备部署目标检测模型,要求: ✅ 实时检测速度≥15FPS ✅ 模型精度损失<5% ✅ 兼容中低端安卓设备👉 GitHub项目地址:pytorch/android-demo-app/ObjectDetection我已上传这份源码到csdn下载准备模型(必须走这步才能跑通安卓端源码)如果您没有设置PyTorch环境来运行该脚本,可以下载模型文件此处转到“android演示app/ObjectDetection/app/src/main/assets”文件夹,然后跳过此步骤的其余部分,直

机器学习、深度学习、强化学习、迁移学习 1567

提升仿真效率:Synopsys VCS高级编译选项优化技巧(2023最新版)

本文深入探讨了Synopsys VCS 2023版本中的高级编译选项优化技巧,帮助工程师提升仿真效率。通过并行编译、智能代码分析、精准覆盖率采样等策略,结合真实案例展示如何显著缩短仿真周期并优化资源使用,适用于数字芯片验证和大型SoC设计。

weixin_30338481的博客 113

Android Handler使用介绍

Android 中的 Handler 是用来和线程通信的重要工具。它主要用于在后台线程中执行任务,并将结果传递回主线程以更新用户界面。

小旭的专栏 3603

PPO(Proximal Policy Optimization)算法原理及实现,详解近端策略优化

接着上面的讲,PG方法一个很大的缺点就是参数更新慢,因为我们每更新一次参数都需要进行重新的采样,这其实是中on-policy的策略,即我们想要训练的agent和与环境进行交互的agent是同一个agent;与之对应的就是off-policy的策略,即想要训练的agent和与环境进行交互的agent不是同一个agent,简单来说,就是拿别人的经验来训练自己。举个下棋的例子,如果你是通过自己下棋来不断提升自己的棋艺,那么就是on-policy的,如果是通过看别人下棋来提升自己,那么就是off-policy的。

weixin_41106546的博客 9万+

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

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

weixin_36252618的博客 5275

S7-1200控制S120变频器

②:硬件目录下,添加实物S120设备进行组态(其它现场设备--PROFINET IO--DRIVES......②:双击S120进行IP地址和设备名称设置(注:此处要与STATER软件设置S120一致)M10.0接通时,电机开始运行,M10.0断开,电机停止,调试完成。①:将S7-1200与S120进行通讯连线。④:STATER软件下设置与组态一致的报文。①:点击添加新设备,按实物进行设备组态。②:打开OB1,编写启动停止程序。①:查看S120报文地址。②:模块下添加DO矢量。③:子模块下添加报文。

weixin_38261173的博客 4867

使用 SAP 自家的 AI 工具 Joule 辅助 SAP Fiori 应用开发

SAP Joule 不请自答,解释说标记了接口的 UI Component,具备进行异步内容创建的能力,比如其通过 rootView 分配的视图,在运行时可以异步创建。目前 SAP Business Application Studio 里的 SAP Joule 支持下面这八种上下文,绝大部分都和 SAP UI5 开发相关,剩下的则是代码仓库和 SAP 帮助文档的搜索。SAP Joule 回答的大意是:我只负责回答 SAP UI5 开发相关的问题,不要和我扯其他有的没的。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1096

带你深入了解Android Handler的用法

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

Dakaring的专栏 6227

单片机:实现FFT快速傅里叶变换算法(附完整源码)

单片机:实现FFT快速傅里叶变换算法(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1099

Android开发中Handler使用入门

package com.example.android_handler; import android.app.Activity; import android.app.ProgressDialog; import android.content.res.Resources; import android.os.Bundle; import android.os.Handler; import

好书推荐 1235

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

收藏 | Android开发从入门到精通系列书籍资料最全攻略!!!(最新更新)

很多人会私信给我提问,问安卓的学习路线是什么,因为之前没有写过系统的路线图,于是近期花了一些时间,把这块的知识,做成一个体系分享给大家,也算是自己在安卓这边做的一份贡献。 关于安卓如何来学习,安卓入门怎么去学,这一讲主要分享的是安卓APP开发的一个学习路线,原创不易,如果喜欢,分享支持明哥! 我们来进行今天的分享,整个的安卓学习路线,按着这个路线去学习,可以保证能够快速的上手,掌握安卓开发。 整理不易,记得先点赞支持下!! 整理不易,记得先点赞支持下!! 整理不易,记得先点赞支持下!! 第.

程序员入门进阶 6286

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Android入门笔记 - 界面开发 - ProgressBar,Handler

好的,今天我们来接触一下进度条,和Handler。 ProgressBarHandler 来来来,上代码: 1. res/layout/activity_main.xml : <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_

Daker's Blog 725

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Android 总结:Message,MessageQueue,Looper,Handler 消息机制(1),Android开发入门教程

/主线程的Looper对象//这里以主线程的Looper对象创建了handler,//所以,这个handler发送的Message会被传递给主线程的MessageQueue。//构建Message对象//第一个参数:是自己指定的message代号,方便在handler选择性地接收//第二三个参数没有什么意义//第四个参数需要封装的对象Message msg = handler.obtainMessage(1,1,1,“主线程发消息了”);//发送消息});

2401_84149845的博客 1136

Android全面解析之Handler机制:常见问题汇总,android开发入门教程电子书

while (p != null && p.when <= when) { prev = p; p = p.next; } } // 插入同步屏障 if (prev != null) { // invariant: p == prev.next msg.next = p; prev.next = msg; } else { msg.next = p; mMessages = msg; } return token; } } 可以看到同步屏障就是一个特殊的target,哪里特殊呢?tar

m0_65145113的博客 154

Android全面解析之由浅及深Handler消息机制

前言 很高兴遇见你~ 欢迎阅读我的文章。 关于Handler的博客可谓是俯拾皆是,而这也是一个老生常谈的话题,可见的他非常基础,也非常重要。但很多的博客,却很少有从入门开始介绍,这在我一开始学习的时候就直接给我讲Looper讲阻塞,非常难以理解。同时,也很少有系统地讲解关于Handler的一切,知识比较零散。我希望写一篇从入门到深入,系统地全面地讲解Handler的文章,帮助大家认识Handler。 这篇文章的讲解深度循序渐进,不同程序的读者可选择对应的部分查看: 第一部分是对于Handler的入门概述。

一只修仙的猿 1万+

线程、消息-Android入门开发系列学习之 Handler使用-by小雨

发一下牢骚和主题无关: Android供给了一个步异的消息调回机制Handler, 它责负发送消息和处置线程消息列队中的消息及runnable对象 Handler例实都是与一个线程和该线程的消息列队起一应用,一旦建创了一个新的handler例实,系统就把该例实与一个线程和该线程的消息列队捆绑起来,这将可以发送消息和runnable对象给该消息列队,并在消息列队...

weixin_30570101的博客 74

27道 Handler 经典面试题,你能答出多少?,android开发入门与实战第二版

再结合上述的例子,也就是当有新消息要插入表头了,这时候如果之前是阻塞状态(mBlocked=true),那么就要唤醒线程了。 否则,就需要取链表中找到某个节点并插入消息,在这之前需要赋值needWake = mBlocked && p.target == null && msg.isAsynchronous() 也就是在插入消息之前,需要判断是否阻塞,并且表头是不是屏障消息,并且当前消息是不是异步消息。 也就是如果现在是同步屏障模式下,那么要插入的消息又刚好是异步消息,那

m0_66144910的博客 355

ZUI易入门Android之Handler

轻描时光 210

视频教程-安卓开发多线程精讲一学就会-Android

安卓开发多线程精讲一学就会 大学计算机专业毕业,从业IT四年,擅长java,...

weixin_32476185的博客 172

安卓航班Android开发经典教程大总结1----基础编程及源码推送

上篇主要讲述了社区的总体规划以及总结此次教程的目的,接下来开始正式总结android开发相关知识,从最简单的环境搭建到正式项目的制作,当然教程是总结来的,同时再次声明资料很多来自互联网,如有侵权请联系本人(ghost@apkway.com), 众所周知android开发核心语言采用的是java,做过javaEE或者j2me的同学肯定对java基础知识有一定的掌握,想必学习android 也是很

2674
上一篇: 解决ios6系统输入法bug的一种方法
下一篇: Android入门开发之SAX
NewJerryj
博客等级 码龄19年 196粉丝 115原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值