Android学习之Handler消息】的更多相关文章

Android系统规定,一些耗时的操作不能放在UI线程中去执行,这样会报一个ANR错误.所以为了避免该问题,我们需要开启一个新的线程去执行一些耗时操作:开启新的线程,将耗时的操作在新线程里面去执行, 但是子线程中不能更新UI界面,所以我们使用android的Handler机制可以解决这个问题.  详细解释如下: 当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控件,进行事件分发, 比如说, 你要是点击一个 Button ,Android会分发…
前言: 无论是现在所做的项目还是以前的项目中,都会遇见线程之间通信.组件之间通信,目前统一采用EventBus来做处理,在总结学习EventBus之前,觉得还是需要学习总结一下最初的实现方式,也算是不忘初心吧,这也是今天来学习总结Handler消息机制的一个原因. 消息传递相关文章地址: Android消息传递之Handler消息机制 Android消息传递之组件间传递消息 Android消息传递之EventBus 3.0使用详解 Android消息传递之基于RxJava实现一个EventBus…
Android的消息机制主要是指Handler的运行机制以及Handler所附带的MessageQueue和Looper的工作过程.   1.为什么要使用Handler? Android规定访问UI只能在主线程中进行,如果在子线程中访问UI,则会抛出异常.同时Android建议不能在主线程中进行耗时的操作,不然会导致程序无法响应即ANR.因此耗时的工作只能交给子线程去做,而子线程却不能直接访问UI,为了解决这个矛盾,Android提供了Handler.Handler的主要作用是将某个任务切换到某…
不错的例子:http://www.cnblogs.com/menlsh/archive/2013/06/07/3125341.html 转自:一叶知秋的博客 http://blog.sina.com.cn/s/blog_77c6324101016jp8.html 一.Handler的定义: Handler主要接收子线程发送的数据, 并用此数据配合主线程更新UI,用来跟UI主线程交互用.比如 (1) 可以用handler发送一个message,然后在handler的线程中来接收.处理该消息,以避免…
Android只允许UI线程修改Activity里的UI组件.当Android程序第一次启动时,Android会同时启动一条主线程(Main Thread),主线程主要负责处理与UI相关的事件,如用户的按键事件.屏幕绘图事件,并把相关的事件分发到对应的组件进行处理.所以,主线程通常又被称为UI线程. Android只允许UI线程修改Activity里的UI组件,这样会导致新启动的线程无法动态改变界面组件的属性值.但在实际的Android程序开发中,尤其是涉及动画的游戏开发中,需要让新启动的线程周…
一.什么是UI线程 当程序第一次启动的时候,Android会同时启动一条主线程( Main Thread). 主要负责处理与UI相关的事件. 二.UI线程存在的问题 出于性能优化考虑,Android的UI操作并不是线程安全的,意味着如果多个线程并发操作UI线程,可能导致线程安全问题. 为了解决这个问题,Android规定:只允许UI线程修改Activity里的UI组建. 三.消息传送机制作用 为了解决Android应用多线程问题—Android平台只允许UI线程修改Activity里的UI组建,…
Handler用来发消息和处理消息.典型的用法是更新界面.android不允许在子线程里面更新界面,通常是把Handler传到子线程中,在子线程里通过sendEmptyMessage函数发消息.Handler的handleMessage函数响应消息,实现更新界面. 下面看一个例子.Handler的定义如下: public class PlayHandler extends Handler { private ImageView imageView; int currentImageId = 0;…
android平台不允许Activity新启动的线程访问该Activity里的界面组件,这样就导致新启动的线程无法动态的改变界面组件的属性值.但是实际android应用开发中,需要新启动的线程周期性地修改界面组件的属性值. Handler类简介 主要作用: 1.在新启动的线程中发送消息 2.在主线程中获取.处理消息 为了让主线程“适时”地处理新启动的线程所发送的消息,Handler是通过回调的方式来实现的——开发中只要重写Handler类中处理消息的方法,当新启动的线程发送消息时,Handler…
对比请看http://blog.sina.com.cn/s/blog_78c913e30100uqmf.html 以下代码是MainActivity.java中的代码 package com.example.handlertest; import android.app.Activity; import android.os.Bundle; import android.os.Handler; public class MainActivity extends Activity { privat…
使用Handler管理线程(转) 步骤: 1. 申请一个Handler对象 Handler handler = new Handler(); 2. 创建一个线程 {继承Thread类或者实现Runnable这个接口} 使用Runnable创建一个内部匿名类对象updateThread(要复写run方法) 3. 使用handler的post方法将线程加入到线程队列中 handler.post(updateThread); 4. 使用handler的removeCallbacks方法移出update…
消息提示可细分为两种:大量消息提示——当程序有大量图片.信息需要展示时,采用对话框消息提示: 小量消息提示——当程序只有少量信息需要呈现给用户时,采用轻量级的对话框——Toast; Toast ==> Toast是一种非常方便的消息提示方式,其会在程序中呈现一个简单的提示信息,类似Winform中的MessageBox. Toast提示方式的特点: 1.Toast提示信息不会获取焦点 2.Toast提示信息过一段时间会自动消失 Toast使用操作步骤: 1.调用Toast的构造器或makeTex…
Message是Handler接收和处理的消息对象. 每个线程只能拥有一个Looper.它的loop方法读取MessageQueue中的消息,读到消息之后就把消息交给发送该消息的Handler进行处理.MessageQueue是消息队列,它采用先进先出的方式来管理Message.程序创建Looper对象时会在它的构造器中创建MessageQueue对象. 下面用一个例子说明.不能在主线程中执行耗时的工作,否则会报ANP错误.常用的方法是在主线程中向子线程中发消息,交给子线程处理.看下面的例子.…
我们在<Android学习之Handler消息传递机制>(http://www.cnblogs.com/zhouhb/p/5812447.html)已提到过,Android只允许UI线程修改Activity里的UI组件,这样会导致新启动的线程无法动态改变界面组件的属性值.为了解决新线程不能更新UI组件的问题,除了可以借助于Handler的消息传递机制来实现,还可以使用AsycTask. 1 AsyncTask使用方法简介 AsyncTask<Params, Progress, Resul…
 联合学习 Android 异步消息处理机制 让你深入理解 Looper.Handler.Message三者关系   1. 首先我们通过一个实例案例来引出一个异常: (1)布局文件activity_main.xml: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" a…
 联合学习 Android 异步消息处理机制 让你深入理解 Looper.Handler.Message三者关系   1. 首先我们通过一个实例案例来引出一个异常: (1)布局文件activity_main.xml: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" a…
(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 六.Android学习第五天——Handler的使用 注意:有很多功能是不能写在Activity中的,例如说下载或者处理大量的数据等,如果这类操作写在Activity中,就有可能导致整个Activity无响应甚至报错,这样用户体验就会比较差.所以此类功能应该独立于Activity,且互不干扰,所以Handler就应运而生了.Handler提供了一个异步的消息处理的方案,将…
目录(?)[-] worker线程小例子 小例子代码worker线程通过handler实现与主线程的通信 小例子代码继承Handler代码 小例子代码子线程的Runnable 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 对于时间较长处理一般不放在UI线程(即主线程)中,避免出现ANR的现象,我们会另启一个线程,利用handler进行子线程和主线程之间的通信,实现子线程触发UI操作.这…
文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 之前我们有一篇很好的博文<Android学习笔记(三一):线程:Message和Runnable>对Handler进行了介绍.在此,我们作进一步了解. 前面,我们已经学习到主线程有一个主线程队列,对于异步处理(如Activity的UI触发.触发本地服务的startService(),以及外部进程调用Activity和广播).异步处理以消息…
目录(?)[-] 小例子 Handler的处理 Activity的代码片段 后台线程和UI的互动 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 之前我们介绍了Android主线程异步处理机制.通过Handler可以将消息放置到队列中等待处理.Handler可以控制消息放置在队列方式:sendMessage(), sendMessageAtFrontOfQueue(), sendMess…
尊重原创:http://blog.csdn.net/yuanzeyao/article/details/38408493 作为Android开发者,Handler这个类应该是再熟悉只是了.由于差点儿不论什么App的开发.都会使用到Handler这个类,有些同学可能就要说了,我全然能够使用AsyncTask取代它,这个确实是能够的,可是事实上AsyncTask也是通过Handler实现的,详细的大家能够去看看源代码即可了,Handler的主要功能就是实现子线程和主线程的通信.比如在子线程中运行一些…
演讲前,AsyncTask文章.我们在最后谈到.AsyncTask它是利用Handler异步消息处理机制,操作结果.使用Message回到主线程,从而执行UI更新线程. 而在我们的日常开发工作,Handler一类是经常使用在我们中间,然后Handler的主要作用是什么? Handler 的主要作用就是对消息(消息能够是我们想做的一些UI更新,也能够是其它的一些不可见的操作,如操作数据库等)的异步处理机制.而相信大家都了解异步的概念. 简单地说一下: 1)从程序的角度来看,就是当运行某行代码的时候…
前言 很高兴遇见你~ 欢迎阅读我的文章. 关于Handler的博客可谓是俯拾皆是,而这也是一个老生常谈的话题,可见的他非常基础,也非常重要.但很多的博客,却很少有从入门开始介绍,这在我一开始学习的时候就直接给我讲Looper讲阻塞,非常难以理解.同时,也很少有系统地讲解关于Handler的一切,知识比较零散.我希望写一篇从入门到深入,系统地全面地讲解Handler的文章,帮助大家认识Handler. 这篇文章的讲解深度循序渐进,不同程序的读者可选择对应的部分查看: 第一部分是对于Handler的…
在安卓面试中,关于 Handler 的问题是必备的,但是这些关于 Handler 的知识点你都知道吗? 一.题目层次 Handler 的基本原理 子线程中怎么使用 Handler MessageQueue 获取消息是怎么等待 为什么不用 wait 而用 epoll 呢? 线程和 Handler Looper MessageQueue 的关系 多个线程给 MessageQueue 发消息,如何保证线程安全 Handler 消息延迟是怎么处理的 View.post 和 Handler.post 的区…
1.先看一下最简单的进度条示例 EG: package com.sxz.android.thread; import java.util.concurrent.atomic.AtomicBoolean;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.widget.ProgressBar;public cla…
这篇文章是android开发人员的必备知识. 1.轮询服务器     一般的应用,定时通知消息可以采用轮询的方法从服务器拿取消息,当然实时消息通知的话,建议采用推送服务.    其中需要注意轮询的频率设置,要在需求和性能中平衡. 2.独立进程     无论程序是否正在运行,我们都要能通知到客户,我们需要一个独立进程的后台服务.     我们需要一个独立进程的后台服务.     在AndroidManifest.xml中注册Service时,有一个android:process属性,如果这个属性以…
在第二篇文章<Android中利用Handler实现消息的分发机制(一)>中,我们讲到主线程的Looper是Android系统在启动App的时候,已经帮我们创建好了,而假设在子线程中须要去使用Handler的时候,我们就须要显式地去调用Looper的 prepare方法和loop方法,从而为子线程创建其唯一的Looper. 详细代码例如以下: class LooperThread extends Thread { public Handler mHandler; public void run…
1.Handler的作用 Android开发中,我们经常使用Handler进行页面的更新.例如我们需要在一个下载任务完成后,去更新我们的UI效果,因为AndroidUI操作不是线程安全的,也就意味着我们不能在非UI线程中去操作UI,否则会抛出CalledFromWrongThreadException异常. Handler的基本用法: Handler handler = new Handler() { @Override public void handleMessage(Message msg…
可能是出于性能的考虑,Android的UI操作是非线程安全的. 也就是说,如果你在一个新开的线程中直接操作UI是会引发异常的. 但是,Android又规定,不要去阻塞UI线程!否则,轻者引起程序卡顿,重者直接引发臭名昭著的“ANR”异常. 为了解决这一种矛盾,Android引入了Handler来解决这个问题. Handler有两种常见的用法: 第一种是“发送信息”,我们可以将我们要改变的参数通过Message发送给指定的Handler,然后在Handler中的handleMessage方法中进行…
package com.example.handlertest; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.app.Activity; import android.view.Menu; import android.view.View; import android.view.View.OnCli…
好记性不如烂笔头,今天来分析一下Handler的源码实现 Handler机制是Android系统的基础,是多线程之间切换的基础.下面我们分析一下Handler的源码实现. Handler消息机制有4个类合作完成,分别是Handler,MessageQueue,Looper,Message Handler : 获取消息,发送消息,以及处理消息的类 MessageQueue:消息队列,先进先出 Looper : 消息的循环和分发 Message : 消息实体类,分发消息和处理消息的就是这个类 主要工…