android基础——Handler

Android基础之Handler分析 同步屏障的设置可以方便地处理那些优先级较高的异步消息。当我们调用并设置消息的时,target 即为 null ,也就开启了同步屏障。当在消息轮询器 Looper 在loop()中循环处理消息时,如若开启了同步屏障,会优先处理其中的异步消息,而阻碍同步消息。 阅读详情
 

android里面对于异步消息的处理,提供了一套Handler的实现方案。Handler有很多适宜的应用和微妙之处,使它在和Thread以及Service等一起使用的时候达到很好的效果。

一. Handler与Thread的区别。Handler与调用者处于同一线程,如果Handler里面做耗时的动作,调用者线程会阻塞。Android UI操作不是线程安全的,并且这些操作必须在UI线程中执行。Android提供了几种基本的可以在其他线程中处理UI操作的方案,包括Activity的runOnUiThread(Runnable),View的post以及1.5版本的工具类AsyncTask等方案都采用了Handler,Handler的post对线程的处理也不是真正start一个新的线程,而是直接调用了线程的run方法,这正是google煞费苦心搞一套Handler的用意。

   public void onCreate(Bundle savedInstanceState) {

      super.onCreate(savedInstanceState);

 

      startThread();

      // sendMessage();

      SystemClock.sleep(2000);

      setContentView(R.layout.main);

 

   }

 

   public void startThread() {

      mThread.start();

   }

 

   public void sendMessage() {

      MHandler mHandler = new MHandler();

      Message msg = mHandler.obtainMessage();

      msg.sendToTarget();

   }

 

   class MHandler extends Handler {

      public MHandler() {

      }

 

      public MHandler(Looper l) {

        super(l);

      }

 

      @Override

      public void handleMessage(Message msg) {

        int count = 0;

        while (count++ < Integer.MAX_VALUE) {

           Log.d(TAG, "Rintail");

        }

      }

   }

 

   Thread mThread = new Thread() {

      @Override

      public void run() {

        int count = 0;

        while (count++ < Integer.MAX_VALUE) {

           Log.d(TAG, "Rintail");

        }

      }

   };

 

 

二.    Handler对于Message的处理不是并发的。一个Looper 只有处理完一条Message才会读取下一条,所以消息的处理是阻塞形式的。但是如果用不同的Looper则能达到并发的目的。Service中,onStart的执行也是阻塞的。如果一个startService在onStart执行完成之前,再次条用startService也会阻塞。如果希望能尽快的执行onStart则可以在onStart中使用handler,因为Message的send是非阻塞的。如果要是不同消息的处理也是并发的,则可以用不同的Looper实例化Handler。

 

   public void onStart(Intent intent, int startId) {

      super.onStart(intent, startId);

      sendMessageWithLooper();

      //sendMessage();

   }

 

   public void sendMessage() {

      MHandler mHandler = new MHandler();

      Message msg = mHandler.obtainMessage();

      msg.sendToTarget();

   }

 

   public void sendMessageWithLooper() {

      HandlerThread ht = new HandlerThread("Rintail");

      ht.start();

      MHandler mHandler = new MHandler(ht.getLooper());

      Message msg = mHandler.obtainMessage();

      msg.sendToTarget();

   }

 

   class MHandler extends Handler {

 

      public MHandler() {

      }

 

      public MHandler(Looper l) {

        super(l);

      }

 

      @Override

      public void handleMessage(Message msg) {

        Log.d(TAG, "first");

        while (true) {

           if (false)

              break;

        }

        Log.d(TAG, "second");

      }

   };

 

   class MyThread extends Thread {

 

      @Override

      public void run() {

        Log.d(TAG, "first");

        while (true) {

           if (false)

              break;

        }

        Log.d(TAG, "second");

      }

   };

 

三。  资源回收

向Handler对象发送类似new Message ()形式的空Message可以达到清空Message的目的,这种做法与getLooper().quit()的做法是一样的。如果利用的资源较多,应及时清理。

Android中的Handler的具体用法 NULL 博文链接:https://txlong-onz.iteye.com/blog/934957 立即下载

相关推荐

android Handler的使用(一)

NULL 博文链接:https://byandby.iteye.com/blog/832467

android之handler使用

android里面对于异步消息的处理,提供了一套Handler的实现方案。Handler有很多适宜的应用和微妙之处,使它在和Thread以及Service等一起使用的时候达到很好的效果。 一. Handler与Thread的区别。Handler与调用者处于同一线程,如果Handler里面做耗时的动作,调用者线程会阻塞。Android UI操作不是线程安全的,并且这些操作必须在UI线程中执行。...

web_net的专栏 154

android中Handler的使用方法和总结

作为android开发重要的一部分。handler起到了十分重要的作用。就像布局文件一样。这个很重要。文档中由于时间关系后期排版不是很好。希望读者见谅。

Android IntentService完全解析 当Service遇到Handler

转载请标明出处: http://blog.youkuaiyun.com/lmj623565791/article/details/47143563; 本文出自:【张鸿洋的博客】 一 概述 大家都清楚,在Android的开发中,凡是遇到耗时的操作尽可能的会交给Service去做,比如我们上传多张图,上传的过程用户可能将应用置于后台,然后干别的去了,我们的Activ...

weixin_30746117的博客 541

详解Android中Handler的使用方法

在Android开发中,我们经常会遇到这样一种情况:在UI界面上进行某项操作后要执行一段很耗时的代码,比如我们在界面上点击了一个”下载“按钮,那么我们需要执行网络请求,这是一个耗时操作,因为不知道什么时候才能完成。为了保证不影响UI线程,所以我们会创建一个新的线程去执行我们的耗时的代码。当我们的耗时操作完成时,我们需要更新UI界面以告知用户操作完成了。所以我们可能会写出如下的代码: package ispring.com.testhandler; import android.app.Activity; import android.os.Bundle; import android.vie

android Handler详细使用方法实例

开发环境为android4.1.Handler使用例1这个例子是最简单的介绍handler使用的,是将handler绑定到它所建立的线程中.本次实验完成的功能是:单击Start按钮,程序会开始启动线程,并且线程程序完成后延时1s会继续启动该线程,每次线程的run函数中完成对界面输出nUpdateThread…文字,不停的运行下去,当单击End按钮时,该线程就会停止,如果继续单击Start,则文字又开始输出了。软件界面如下:实验主要部分代码和注释:MainActivity.java: 代码如下:package com.example.handler1; import android.app.Ac

Android Handler使用详解

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

小旭的专栏 7668

ArcGIS属性表汉字转拼音

接着我安装了一个编辑器“PyCharm Community Edition 2019.3.3\bin\pycharm64.exe”,在里面添加“pypinyin”包,然后将其设置为arcgis的编辑器和调试程序,还是失败;我在10.6的机器上折腾了上面几步,直到两周后脚本突然运行成功,我也不确定是哪一步导致pypinyin包配置成功,因此将心得体会写出来,如果过一段时间,打开10.2的机器运行脚本成功了,再写后续.......,按照“配置方法1:”进行尝试,显示配置失败。

2301_77413856的博客 1297

android handler使用

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

Warden032的博客 1015

Aloudata Agent :基于 NoETL 明细语义层的分析决策智能体

这是包括我们在内的一些厂商探索的一个新方向,这种方式先由大模型将自然语言转化为对指标语义层的查询请求(MQL,Metrics Query Language),再由指标平台将指标和维度的查询与计算逻辑转化为准确的 SQL 查询语句。用户查询经大模型语义解析后,将其转换为指标、维度及筛选条件的组合表达,并生成面向指标平台的 MQL,Aloudata CAN 指标平台的语义引擎将 MQL 转换为准确和可执行的查询 SQL,语义引擎内置函数体系与 SQL 解析器,确保语义转换的 100% 准确性。

Aloudata的博客 1666

OpenCV 开闭运算

开运算和闭运算是将腐蚀和膨胀按照一定的次序进行处理。 但这两者并不是可逆的,即先开后闭并不能得到原来的图像。 开运算 开运算是先腐蚀后膨胀,其作用是:分离物体,消除小区域。特点:消除噪点,去除小的干扰块,而不影响原来的图像。 闭运算 闭运算与开运算相反,是先膨胀后腐蚀,作用是消除/“闭合”物体里面的孔洞,特点:可以填充闭合区域。 cv.morphologyEx(img, op, kernel) img: 要处理的图像 op: 处理方式:若进行开运算,则设为cv.MORPH_OPEN,若进行闭

꧁༺ʚvv༒catɞ༻꧂的博客 949

带你深入了解Android Handler的用法

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

Dakaring的专栏 6228

docker拉取镜像报错:Error response from daemon: Get “https://registry-1.docker.io/v2/“: dial tcp

docker拉取镜像报错:Error response from daemon: Get “https://registry-1.docker.io/v2/“: dial tcp

m0_55333789的博客 1559

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

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

m0_57502067的博客 1007

医学图像配准实战:用Python实现MIND特征提取(附完整代码)

本文详细介绍了MIND(模态无关邻域描述符)在医学图像配准中的应用。通过Python和PyTorch实战,从原理到代码逐步解析了如何提取MIND特征,并利用其对结构而非灰度的感知能力,有效解决CT、MRI等多模态图像的对齐难题,为病灶追踪、手术导航等高级应用提供鲁棒性基础。

263

F280049C_HRPWM_死区时间高精度控制与MEP技术实战解析

本文深入解析了F280049C的HRPWM模块及其基于MEP技术的死区时间高精度控制。通过实测数据与TI官方代码对比,详细阐述了DBREDHR和DBFEDHR寄存器的配置技巧、精度优化方法及常见问题调试,为电源管理和电机控制应用提供了实用的实战指南。

yolo5detector的博客 217

安卓Android学习之handler的基础用法

总得来说Handler的主要用途有两个:(1)、在将来的某个时刻执行消息或一个runnable;(2)把消息发送到消息队列。先看效果一:延迟一秒改变文字:点击按钮一秒后改变文字再看效果二:进度条3秒后消失:点击按钮后出现进度条,3秒后消失。talk is cheap,show me the code:package mountain_hua.learn1; import android.app....

mountain_hua的博客 559

飞牛fnNAS搭建私有云音乐库

本文介绍了在飞牛NAS上部署Navidrome音乐服务器的完整流程。首先创建音乐存储目录并安装Navidrome应用,然后配置管理员账号、语言设置和音乐路径。接着详细说明使用"音乐标签"软件刮削音乐元数据的方法,包括获取软件、导入音乐文件和自动匹配标签。针对远程访问需求,推荐使用ZeroTier实现内网穿透,并给出注册、创建网络及设备加入的具体步骤。最后介绍移动端使用"音流"APP连接Navidrome服务器的配置方法,实现手机端音乐播放。通过这套方案,用户可以搭建专

dgnankai的专栏 1830

安卓基础(Looper和Handler)

prepare()

hongsegeming的博客 572

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Android基础之Handler分析,阿里巴巴安卓面试题答案

同步屏障的设置可以方便地处理那些优先级较高的异步消息。当我们调用并设置消息的时,target 即为 null ,也就开启了同步屏障。当在消息轮询器 Looper 在loop()中循环处理消息时,如若开启了同步屏障,会优先处理其中的异步消息,而阻碍同步消息。点击我的GitHub免费领取获取往期Android高级架构资料、源码、笔记、视频。

weixin_58085973的博客 906

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Android基础Thread与Handler

Thread与Handler

Happy__snake的博客 924

温度PID控制PLC程序

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

安卓基础:Handler的初识

Handler的初识 一.为什么需要使用Handler 学习之前我们先做一个例子说明为什么要使用Handler: 实现点击开始下载后5秒后 把正在下载改成下载完成 布局文件代码: 这&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt; &amp;lt;LinearLayout xmlns:android=&quot;http://s

qq_38845493的博客 1万+

安卓消息机制之Handler基础知识

相信大家从网上也看到过Handler的代码解析,下面我将从我个人理解的角度,以尽量通俗易懂的语言带领大家对Handler的用法以及源码设计进行解读。

weixin_39330114的博客 1452

Android 基础—— Handler 机制

前言Handler 在Android 开发中是使用频率非常高的,所以Android 开发有必要了解Handler 的机制。

CFOX 537

小米安卓开发笔试题B卷解析:Java基础、Handler与性能优化

在Android应用开发中,掌握系统底层原理与Java并发机制是构建稳定应用的基础。文章围绕Android核心组件生命周期、Handler消息循环、View绘制与内存优化等关键技术,解析小米2019秋招安卓开发笔试题B卷的考点与答题思路。通过分析Activity启动模式、线程通信、HTTP缓存等常见面试问题,展示如何将原理知识落地到实际工程排查中。同时强调手写单例、图片加载库设计等编程题中的工程边界意识,帮助开发者建立系统化的复习框架。适用于校招备考与社招基础巩固。

weixin_34323858的博客 414
上一篇: Android 应用程序之间数据共享—ContentResolver
下一篇: COOLPAD F608刷机过程
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值