android开发---handler

手把手教你用VCS+Verdi在Linux下仿真蜂鸟E203 RISC-V核(附波形调试技巧) 本文详细介绍了在Linux环境下使用VCS和Verdi工具链对蜂鸟E203 RISC-V核进行仿真验证的完整流程。从环境配置、工程结构解析到VCS编译优化和Verdi波形分析技巧,提供了实战性强的调试方法和性能优化策略,帮助工程师高效完成数字IC验证工作。 阅读详情


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

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

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

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

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


一、在主线程中使用handler

通过handler中一个线程向消息队列中用sendMessage方法发送消息,发送的消息当然可以用来传递参数。在handler中用handleMessage来处理消息,处理方法是获得消息队列中的消息参数

本实验实现的是当开始按钮按下时,会启动一个线程,并绑定到handler中,该线程发送带有参数的message到handler的消息队列中,消息队列的另一端获取该消息,并且用该消息的参数来更新进度条。


package com.example.marshandler2;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.*;

public class MainActivity extends Activity {
	
	private ProgressBar proBar=null;
	private Button start=null;
	

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		proBar=(ProgressBar)findViewById(R.id.progressBar);
		start=(Button)findViewById(R.id.start);
		start.setOnClickListener(new startOnClickListener());
	}
	
	public class startOnClickListener implements OnClickListener{
		
	

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
	
		 proBar.setVisibility(View.VISIBLE);
		 myHandler.post(myThread);
		
		}
	}
	
	Handler myHandler=new Handler(){
		
		@Override
		public void handleMessage(Message msg){
			proBar.setProgress(msg.arg1);
			myHandler.post(myThread);
		}
	};
	
	
   Runnable myThread=new Runnable(){

	    int i=0;
	@Override
	public void run() {
		// TODO Auto-generated method stub
	
		Message msg=myHandler.obtainMessage();
		i+=10;
		msg.arg1=i;
		try{
			Thread.sleep(1000);
			}catch(InterruptedException  e){
				e.printStackTrace();
			}
		
		myHandler.sendMessage(msg);
		if(i==100)
			myHandler.removeCallbacks(myThread);
			
	}
	   
   };
	
}


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ProgressBar 
        android:id="@+id/progressBar"
        android:layout_width="match_parent"
        android:layout_height="200dip"
        style="?android:attr/progressBarStyleHorizontal"
        android:visibility="gone"/>
 <Button 
     android:id="@+id/start"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:text="start"/>

</LinearLayout>



第十九届全国大学生智能车竞赛越野信标 硬件篇 全国大学生智能汽车竞赛,越野信标组 阅读详情

相关推荐

Qwen-Image-2512 本地部署完全指南:从零开始搭建你的AI绘图工作站

阿里通义团队开源了Qwen-Image-2512模型,这款AI绘图模型在人物真实感、自然细节和文字渲染上表现惊艳,甚至在盲测中超越部分闭源模型。本文提供了详细的本地部署教程,从硬件准备、环境安装到使用ComfyUI运行模型,手把手教你生成第一张AI图片,并分享了进阶技巧和免费在线体验方式。

莫潇羽的个人博客 2426

转载:android Handler详细使用方法实例

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34195142的博客 408

基于航天宏图PIE-SAR软件的高分三号(GF-3)SAR影像的预处理

软件官网 航天宏图—国内领先的卫星运营与应用服务提供商(官网) 一、数据导入 数据导入-GF-3-根据模式选择 参数文件导入解压后GF-3数据的XML文件 通道自动填充 设置输出目录 确定 等待,加载图像、自动构建金字塔 二、复数数据转换 强度/幅度特征是SAR影像最主要的特征之一,基于SAR强度/幅度影像可以提取地物目标信息,因此需要将SAR复数数据转换为SAR强度/幅度数据。导入输入影像,设置参数类型,输出目录、命名、类型; 漫长的等待 三、多视 为提...

weixin_52127098的博客 9003

Handler的使用与多线程

Android:Handler Handler基本概念: Handler主要用于异步消息的处理:当发出一个消息之后,首先进入一个消息队列,发送消息的函数即刻返回,而另外一个部分逐个的在消息队列中将消息取出,然后对消息进行出来,就是发送消息和接收消息不是同步的处理。 这种机制通常用来处理相对耗时比较长的操作。 Handler工具类在多线程中有两方面的应用:   发送消息,在不同的线

u014744764的专栏 707

速腾16线激光雷达(RS-16)在ubuntu18.04系统下跑SC-A-LOAM算法

说明: 简要记录一下速腾16线激光雷达即RS-16在ubuntu18.04系统下跑SC-A-LOAM算法的过程,因为SC-A-LOAM算法源码不支持RS雷达的数据,大致思想就是先将rs雷达发布的激光数据转换为velodyne类型的数据,考虑到接下来还要基于RS-16实时运行SC-A-LOAM算法,这里提前将RS_SDK驱动安装好。 1 搭建SC-A-LOAM算法运行环境 首先需要在电脑上搭建SC-A-LOAM算法的运行环境,见文章《ubuntu18.04搭建SC-A-LOAM环境并运行》 本文所使用的系统架

超爱吃小蛋糕的66的博客 2373

SGLang HiCache实战:手把手教你配置KV Cache Offload,让大模型推理成本直降84%

本文详细介绍了SGLang HiCache在KV Cache Offload配置与调优中的实战应用,通过多级存储架构和智能卸载策略,显著降低大模型推理成本达84%。文章涵盖HiCache架构优势、环境配置、高级调优策略及生产环境最佳实践,帮助开发者优化GPU显存使用,提升并发处理能力。

weixin_29044713的博客 462

android 按钮控制线程,android开发教程之handle实现多线程和异步处理

这次浅谈一下Handler,为什么会出现Handler这个功能特性呢?首先,在之前的基本控件,基本都是在Activity的onCreate(Bundle savedInstanceState)方法中调用和处理的,但是,在有些情况,比如在网络上下载软件等一些需要等待响应时间比较长的操作,如果同样放在Activity的该方法中的话,那么在执行该方法的时候,整个Activity是不可动的,用户只能干等着...

weixin_33645583的博客 518

保姆级教程:用Ansys Workbench找出BGA焊点最容易坏的位置(附热循环+振动分析)

本文提供了一份详细的Ansys Workbench教程,指导如何通过热循环和振动分析找出BGA焊点最容易失效的位置。从模型搭建、材料定义到网格划分和载荷设置,全面解析了BGA焊点可靠性分析的全流程,帮助工程师提前预防焊点开裂问题,提升电子封装设计的可靠性。

weixin_30983965的博客 419

Handler 基础认识

Handler的定义: 主要接受子线程发送的数据, 并用此数据配合主线程更新UI. 解释: 当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控件,进行事件分发, 比如说, 你要是点击一个 Button ,Android会分发事件到Button上,来响应你的操作。  如果此时需要一个耗时的操作,例如: 联网读取数据,    或者读取本

我爱吃烤鱼的专栏 926

宜搭子表单(自定义页面全部展示)

效果:增加自定义页面添加表格组件,配置数据源变量: formUuid'表单编码'变量: pageSize10变量: currentPage1。

2301_80286061的博客 2277

手把手教你用ES8311芯片搞定智能音箱TTS播放(附完整寄存器配置清单)

本文详细介绍了如何使用ES8311音频编解码芯片实现智能音箱TTS播放功能,包括芯片特性、硬件连接、寄存器配置及调试技巧。通过完整的寄存器配置清单和实战经验,帮助开发者快速掌握ES8311在智能音箱中的应用,优化音频输出质量和低功耗设计。

weixin_42567497的博客 558

Android Handler 四个使用实例 及HandlerThread的使用

当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程),主线程为管理界面中的UI控件,进行事件分发,比如说:点击一个Button,Android会分发事件到Button上,来响应你的操作。如果此时需要一个耗时的操作。例如: 联网读取数据,或者读取本地较大的一个文件的时候,你不能把这些操作放在主线程中,如果你放在主线程中的话,界面会出现假死现象,如果5秒钟还没有完成的话,会收到An

二一点 6728

图像紫边消除(depurple)

对图像紫边形成原因、消除方法进行了介绍。

沧海一升的博客 7565

Android开发中Handler的简单用法

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

程序猿—从入门到上道 2811

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Android基础之Handler分析,vivo安卓开发面试

这个锁,说明的是对所有调用同一个MessageQueue对象的线程来说,他们都是互斥的,然而在我们的Handler里 面,一个线程是对应着一个唯一的Looper对象,而Looper中又只有一个唯一的MessageQueue(这个在上文中也有介绍)。Handler是用于线程间通信的,但是它产生的根本并不只是用于UI处理,而更多的是handler是整个app通信的框架, 大家可以在ActivityThread里面感受到,整个App都是用它来进行线程间的协调。如果频繁的生成对象就会产生内存抖动,也会引发OOM。

m0_57502067的博客 1006

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Android-Handler机制,安卓客户端开发面试题目

面试是一个不断学习、不断自我提升的过程,有机会还是出去面面,至少能想到查漏补缺效果,而且有些知识点,可能你自以为知道,但让你说,并不一定能说得很好。有些东西有压力才有动力,而学到的知识点,都是钱(因为技术人员大部分情况是根据你的能力来定级、来发薪水的),技多不压身。附上我的面试各大专题整理: 面试指南,满满的都是干货,希望对大家有帮助!《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

2401_84153270的博客 700

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

安卓开发过程中的RatingBar、Handler以及GPS在大型项目中的使用【Android】

我们发送的信息将进入主线程的MessageQueue等待,Looper将按照先入先出的顺序将其取出,然后根据消息对象的属性将其分发给相应的Handler进行处理!它将进步转化为分数。RequestLocationUpdates(long minTime,float minDistance,Criteria Criteria,PendingIntent intent):通过指定的位置提供商定期获取位置信息,并通过意向启动相应的组件。Android返回的方向值是一个长度为3的flaot数组,包括三个方向的值!

m0_71592416的博客 258

2020年Android开发实战!带你一步一步深入Handler源码,安卓系列学习进阶视频

大家是不是和我有一样的感觉,不知道什么时候开始,全世界都在问:Android开发凉了吗?就我个人而言,我觉得没有,从我干Android开发开始,就从来没有觉得Android开发在走下坡路。 市场需求 讲道理,Android开发的市场需求还是很大的,因为从岗位招聘情况来看,Android开发岗位的需求量并不比其他岗位少。如果说Android开发凉了,那有些行业应该已经“凉凉三生三世思念成河”了。那是什么原因导致了焦虑呢,我想了想应该是前几年移动开发行业过度火爆,门槛太低导致大家都蜂拥而入,所以现在供应些许不

m0_52308677的博客 348

Android开发中Handler的经典总结

Android开发中Handler的经典总结 当应用程序启动时,Android首先会开启一个主线程(也就是UI线程),主线程为管理界面中的UI控件,进行事件分发。 作者:佚名来源:pin5i|2014-06-18 14:41 收藏 分享 一、Handler的定义: 主要接受子线程发送的数据, 并用此数据配合主线程更新UI。 解释:当应用程序启动时,Android首先会开启一...

hk121的博客 205

Android开发之Handler的前世今生

前言谈到Android开发,就离不开线程操作,而面试中也会常常问到有关异步线程、多线程、Handler等问题,作为面试中中奖率如此之高的一个问题,我们今天不妨来瞅瞅这handle...

陈宇明 218

安卓开发:Handler异步消息处理机制使用

在安卓中,如果我们直接新建主线程意外的线程处理UI,是会报错的。因为安卓不能在子线程中修改UI,必须要在主线程中修改。 示例:public void onClick(View v) { if(v == button) { new Thread(new Runnable() { @Override public void run

new_Aiden的博客 350

Android-Handler机制(1),安卓开发面试

*要想成为高级安卓工程师,必须掌握许多基础的知识。**在工作中,这些原理可以极大的帮助我们理解技术,在面试中,更是可以帮助我们应对大厂面试官的刁难。《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!图片转存中…(img-PmrTyjk0-1712368237783)][外链图片转存中…(img-R1JKVxYQ-1712368237783)]

2401_84153262的博客 729

安卓开发中Handler的应用

在项目开发当中,当用户点击一个按钮时如果执行的是一个非常耗时的操作,处理不好很容易导致系统假死,用户体验很差,而Android开发当中则是,如果任意一个Acitivity没有响应5秒钟以上就会被强制关闭,因此我们需要另外起动一个线程来处理长耗时操作,而主线程则不受其影响,在耗时操作完结发送消息给主线程,主线程再做相应处理。那么线程之间的消息传递和异步处理用的就是Handler。它的主要用途大致是下面

Daisy_ruo的博客 586

安卓开发笔记——关于Handler的一些总结(上)

接上篇文章《安卓开发笔记——关于AsyncTask的使用》,今天来讲下在安卓开发里"重中之重"的另一个异步操作类Handler。 今天打算先讲下关于Handler的一些基本定义和使用方式 还是以一个下载图片为例,先看下实例效果:   好了,先来看下关于Handler的定义: 以上是官方对于Hanler类的描述,大致意思是说:Handler主要用于异步消息的处理:当发出一个消息之后...

weixin_34138521的博客 142

Android 开发之Handler的前世今生

文章独家授权公众号:码个蛋 更多分享:http://www.cherylgood.cn - 谈到Android开发,就离不开线程操作,而面试中也会常常问到有关异步线程、多线程、Handler等问题,作为面试中中奖率如此之高的一个问题,我们今天不妨来瞅瞅这handler长啥样!目前:假设我们需要在子线程中更新UI,一般有以下几种方式: 1、view.post(Runnable action) 2、

Angels_安杰的博客 577

安卓开发之Handler机制学习

我们知道Android为了线程安全,并不允许我们在UI线程外直接更新UI(多线程并发操作更新很可能导致安全问题),不能在UI线程中执行耗时操作(UI线程超过5s没有响应用于请求会导致ANR),也不能在UI线程中执行网络操作(很可能耗时)。因此我们想要实现UI界面更新可以通过Handler来通知UI组件更新,也可以直接使用runOnUiThread()来更新,同时,Android官方也提供了AsyncTask这个封装好的轻量级异步任务类。因此,这次主要来学习下这几种方式。当然,平常使用中更多的肯定会用一些成熟

iris的博客 1044
上一篇: 使用 引用计数 来跟踪访问共享对象的对象数量
下一篇: DNS
技术搬运工
博客等级 码龄11年 3粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值