HandlerThread】的更多相关文章

转载请标明出处:http://www.cnblogs.com/zhaoyanjun/p/6062880.html 本文出自[赵彦军的博客] 前言 以前我在 [Android Handler.Loop 的简单使用] 介绍了子线程和子线程之间的通信. 很明显的一点就是,我们要在子线程中调用Looper.prepare() 为一个线程开启一个消息循环,默认情况下Android中新诞生的线程是没有开启消息循环的.(主线程除外,主线程系统会自动为其创建Looper对象,开启消息循环.) Looper对象通…
使用HandlerThread几大优点: 1.制作一个后台异步线程,需要的时候就可以丢一个任务给它,使用比较灵活; 2.Android系统提供的,使用简单方便,内部自己封装了Looper+Handler机制; 3.可以代替Thread + Looper + Handler的写法; 4.可以避免项目中随处可见的 new Thread().start(),增加系统开销; 使用HandlerThread注意: 1.不要执行太耗时(一般情况不要超过100ms级别的)的任务,如果太耗时可能会阻塞其他的任务…
Android中的Thread没有对java中的Thread做任何封装,而Android提供了一个遍历方法HandlerThread,他继承于Thread,实现了对遍历系统的一些封装,下面研究一下HandlerThread的源码: /* * Copyright (C) 2006 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you…
转自http://www.cnblogs.com/hnrainll/p/3597246.html 介绍 首先我们来看看为什么我们要使用HandlerThread?在我们的应用程序当中为了实现同时完成多个任务,所以我们会在应用程序当中创建多个线程.为了让多个线程之间能够方便的通信,我们会使用Handler实现线程间的通信. 下面我们看看如何在线程当中实例化Handler.在线程中实例化Handler我们需要保证线程当中包含Looper(注意:UI-Thread默认包含Looper). 为线程创建L…
HandlerThread 为什么要使用HandlerThread? 我们经常使用的Handler来处理消息,其中使用Looper来对消息队列进行轮询,并且默认是发生在主线程中,这可能会引起UI线程的卡顿,所以我们用HandlerThread来替代... HanderThread实际上就是一个线程 @Override public void run() { mTid = Process.myTid(); Looper.prepare(); synchronized (this) { mLoope…
其实原本HandlerThread的分析不应该单独开一篇博客的,应该在讲消息机制的那一片中一起分析. 但当时忘记了,而且今天第一次用MarkDown写博客,有点上瘾,就再来一篇,权当滥竽充数过过手瘾. 1.为什么会有HandlerThread 在使用Handler的时候,有的时候会报异常“Can’t create handler inside thread that has not called Looper.prepare()” 为什么会这样呢?回到Handler的源码我们会发现在handle…
一.概念     1.Android中Handler的使用,一般都在UI主线程中执行,因此在Handler接收消息后,处理消息时,不能做一些很耗时的操作,否则将出现ANR错误. 2.HandlerThread继承于Thread,所以它本质就是个Thread.(本身是一个线程) 3.与普通Thread的差别就在于,主要的作用是建立了一个线程,并且创立了消息队列,有自己的looper,可以让我们在自己的线程中分发和处理消息. 二.注意 1.Handler的处理过程运行在创建Handler的线程里 2…
前言 AsyncTask是个好东西,能处理绝大多数应用线程和更新UI的任务,由于其内部使用了静态线程池,如果你有一堆异步任务(例如全局定时更新数据.同一个Activity中多个AsyncTask同时执行)其中有不能马上执行完的情况(例如网络请求超时),那就糟了,其他任务都还等着呢,就会出现任务卡住的情况.此时就需要直接上Thread了,这里参考AsyncTask的API封装了一个ThreadTask,便于必要时代码替换,欢迎交流! 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://…
HandlerThread最大的优势在于引入MessageQueue概念,可以进行多任务队列管理. HandlerThread背后只有一个线程,所以任务是串行依次执行的.串行相对于并行来说更安全,各任务之间不会存在多线程安全问题. HandlerThread所产生的线程会一直存活,Looper会在该线程中持续的检查MessageQueue,并开启消息处理的循环.这一点和Thread(),AsyncTask都不同,thread实例的重用可以避免线程相关的对象的频繁重建和销毁. getLooper(…
今天我们一起来学习下一个Android中比较简单的类HandlerThread,虽然它的初始化有点小麻烦. 介绍 首先我们来看看为什么我们要使用HandlerThread?在我们的应用程序当中为了实现同时完成多个任务,所以我们会在应用程序当中创建多个线程.为了让多个线程之间能够方便的通信,我们会使用Handler实现线程间的通信. 下面我们看看如何在线程当中实例化Handler.在线程中实例化Handler我们需要保证线程当中包含Looper(注意:UI-Thread默认包含Looper). 为…
一.前言 在学习Service的时候,我们一定会知道IntentService:官方文档不止一次强调,Service本身是运行在主线程中的(详见:[Android]Service),而主线程中是不适合进行耗时任务的,因而官方文档叮嘱我们一定要在Service中另开线程进行耗时任务处理.IntentService正是为这个目的而诞生的一个优雅设计,让程序员不用再管理线程的开启和允许. 至于介绍HandlerThread,一方面是因为IntentService的实现中使用到了HandlerThrea…
HandlerThread是一种特殊的Thread,也就是有Looper的thread,既然有looper的话,那我们就可以用此looper来 创建一个Handler,从而实现和它的交互,比如你可以通过与它关联的Handler对象在UI线程中发消息给它处理.HandlerThread 一般可以用来执行某些background的操作,比如读写文件(在此HandlerThread而非UI线程中).既然还是一个Thread,那么 和一般的Thread一样,也要通过调用其start()方法来启动它.它只…
Thread,Looper的组合是非常常见的组合方式. Looper可以是和线程绑定的,或者是main looper的一个引用. 下面看看具体app层的使用. 首先定义thread: package com.joyfulmath.androidstudy.thread; import com.joyfulmath.androidstudy.TraceLog; import android.os.Bundle; import android.os.Handler; import android.o…
HandlerThread本质上是一个线程类,它继承了Thread: HandlerThread有自己的内部Looper对象,可以进行looper循环: 通过获取HandlerThread的looper对象传递给Handler对象,可以在handleMessage方法中执行异步任务. 创建HandlerThread后必须先调用HandlerThread.start()方法,Thread会先调用run方法,创建Looper对象. 一.HandlerThread常规使用步骤 了解完上面Handler…
1.  HandlerThread Android HandlerThread 完全解析 Handler与HandlerThread区别,HandlerThread应用(对比AsyncTask) 备注: Handler机制的分发中心就在Looper中的loop(),loop()方法是一个阻塞方法(里面包含一个for无限循环),HandlerThread将loop转到子线程中处理,降低了主线程的压力,使主界面更流畅,提高用户的交互体验. 2. 使用HandlerThread步骤: (1)创建Han…
HandlerThread 继承了 Thread,添加了 looper,queue 的支持.可以为 Handler 提供线程服务,并可对 执行的任务进行简单的管理. Handler 默认工作在主线程,若要让handler工作在非主线程可以用一下代码实现. HandlerThread mHandlerThread = new HandlerThread("handlerThreadName"); mHandlerThread.start(); Handler mHandler = new…
HandlerThread继承于Thread,所以它本质就是个Thread.HandlerThread类用于方便的创建一个含有looper的线程类,looper用来创建handler类.我们一般不创建looper对象,直接调用HandlerThread即可.HandlerThread本身实现了循环处理消息的功能,不用再直接调用Looper.prepare()和Looper.loop()方法.与普通Thread的差别就在于,它有个Looper成员变量.这个Looper其实就是对消息队列以及队列处理…
前面已经提到过Handler的原理以及Handler的三种用法.这里做一个非常简单的一个总结: Handler 是跨线程的Message处理.负责把Message推送到MessageQueue和处理. Looper 用来轮询MessageQueue,获取Message 发送给指定的Handler进行处理. Looper 需要和线程绑定,绑定那个线程,Handler就会在那个线程处理Message 前两篇文章使用Handler处理的场景是:主线程(UI线程)被子线程更新.即使用主线程的Handle…
一.Message .Looper.Handler之间的关系 1.系统发送的Message消息传送给Handler,Handler将Message放入自己的looper队列的底部   然后再从Looper的顶部获取Message信息,并执行方法. 2.一个Handler只有一个Looper,一个Message仅与一个Handler交互,多个Handler可以与一个Looper交互. 3.主线程自带Hanlder和Looper 4.小技巧:为避免创建Message对象,所以调用Handler.ob…
HandlerThread 继承自Thread,内部封装了Looper. 首先Handler和HandlerThread的主要区别是:Handler与Activity在同一个线程中,HandlerThread与Activity不在同一个线程,而是别外新的线程中(Handler中不能做耗时的操作). 用法: import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android…
1.什么是Handler? SDK中关于Handler的说明例如以下: A Handler allows you to sendand process Messageand Runnable objects associated with a thread's MessageQueue.Each Handler instance is associated with a single thread and that thread'smessage queue. When you create a…
在Android中经常需要创建一个循环线程,有耗时操作时候,放到里面去操作,如果没有耗时操作,就让该线程处于等待,但是不要杀死它, 最好不要一旦有耗时任务,就立刻创建一个新线程,因为会有性能问题. HandlerThread的父类是Thread,内部会有一个looper循环: 首先看一下HandlerThread的构造方法: 注意:一个是默认优先级,一个是可以设置优先级 开始启动: 注意:上面的run方法就是为了调用Looper.prepare和Looper.loop来构建一个循环线程 getL…
HandlerThread详解 1 HandlerThread基本原理 HandlerThread继承自Thread,它是一种可以使用Handler的Thread.它的实现很简单,就是在run方法中通过Looper.prepare()来创建消息队列,并通过Looper.loop()来开启消息循环.这样,我们就可以直接在HandlerThread中创建Handler了.HandlerThread的run方法如下所示: public void run() { mTid = Process.myTid…
转载请注明出处:http://blog.csdn.net/lskshz/article/details/25364909 一.介绍 HandlerThread继承自Thread,当线程开启时,也就是它run方法运行起来后, 线程同时创建了一个含有消息队列的Looper,并对外提供自己这个Looper对象的get方法,这就是它和普通Thread唯一不同的地方. 二.好处 为什么要使用HandlerThread. 1.开发中如果多次使用类似new Thread(){...}.start() 这种方式…
1.描述 刚看完Android多线程编程,对HandlerThread比较感兴趣,趁热巩固练习,实现一个了数字时钟,希望对学习HandlerThread有所帮助.如下: 启动一个HandlerThread不断获取时间 每隔一秒钟通过Handler通知UI线程更新界面的显示 界面上有按钮可以暂停.继续的计时 2.代码实现 创建一个TimerDemo工程,内容很简单,主要是两个文件:布局文件activity_main.xml和Activity文件MainActivity.java.先看activit…
之前基本讲过Handler的一些知识了,我们今天学习下Google封装的一个实现线程通信的一个类HandlerThread 一.HandlerThread使用 @Override protected void onCreate(Bundle savedInstanceState) { ...... HandlerThread handlerThread = new HandlerThread("handler-thread"); handlerThread.start(); mHand…
HandlerThread 简介: 我们知道Thread线程是一次性消费品,当Thread线程执行完一个耗时的任务之后,线程就会被自动销毁了.如果此时我又有一 个耗时任务需要执行,我们不得不重新创建线程去执行该耗时任务.然而,这样就存在一个性能问题:多次创建和销毁线程是很耗 系统资源的.为了解这种问题,我们可以自己构建一个循环线程Looper Thread,当有耗时任务投放到该循环线程中时,线程执行耗 时任务,执行完之后循环线程处于等待状态,直到下一个新的耗时任务被投放进来.这样一来就避免了多次…
摘要: 版权声明:本文出自汪磊的博客,转载请务必注明出处. 一.HandlerThread的介绍及使用举例              HandlerThread是什么鬼?其本质就是一个线程,但是HandlerThread在启动的时候会帮我们准备好一个Looper,并供外界使用,说白了就是使我们在子线程中更方便的使用Handler,比如没有HandlerThread我们要在子线程使用Handler,写法如下: private Handler mHandler; @Override public v…
HandlerThread是一个内部拥有Handler和Looper的特殊Thread,可以方便地在子线程中处理消息. 简单使用 HandlerThread的使用比较简单. mHandlerThread = new HandlerThread(THREAD_NAME); mHandlerThread.start(); 首先,实例化一个HandlerThread,然后调用start()方法.在start()方法中,会调用run()方法: @Override public void run() {…
上篇文章我们讲日志的存储策略的时候用到了HandlerThread,它适合处理"多而小的任务"的耗时任务的时候,避免产生太多线程影响性能,那这个HandlerThread的原理到底是怎样的呢?我们现在从源码角度解读 HandlerThread:继承自Thread,是一个可以使用Handler的Thread.因为在run方法内维护了一个Looper,可以通过Handler发送消息的方式,来通知HandlerThread执行一个具体的任务. public void run() { mTid…