• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > HandlerThread,handlerthread用法

HandlerThread,handlerthread用法

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了handlerthread用法,handlerthread,handlerthread详解,handler用法,android handler用法等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

HandlerThread,handlerthread用法


一、概念

    1、Android中Handler的使用,一般都在UI主线程中执行,因此在Handler接收消息后,处理消息时,不能做一些很耗时的操作,否则将出现ANR错误。

   2、HandlerThread继承于Thread,所以它本质就是个Thread。(本身是一个线程)

   3、与普通Thread的差别就在于,主要的作用是建立了一个线程,并且创立了消息队列,有自己的looper,可以让我们在自己的线程中分发和处理消息。


二、注意

    1、Handler的处理过程运行在创建Handler的线程里

    2、一个线程对应一个Looper,一个Looper对应一个MessageQueue,一个Looper可以对应多个Handler。

    3、handler应该由处理消息的线程创建。

    4、handler与创建它的线程相关联,而且也只与创建它的线程相关联。handler运行在创建它的线程中,所以,如果在handler中进行耗时的操作,会阻塞创建它的线程。

     5、Looper.myLooper();        //获得当前的Looper

 

        Looper.getMainLooper()   //获得UI线程的Lopper

     6、Handle的初始化函数(构造函数),如果没有参数,那么他就默认使用的是当前的Looper,如果有Looper参数,就是用对应的线程的Looper。

     7、如果一个线程中调用Looper.prepare(),那么系统就会自动的为该线程建立一个消息队列,然后调用Looper.loop();之后就进入了消息循环,这个之后就可以发消息、取消息、和处理消息。

 

三、什么是HandlerThread

        Android的线程分为有消息循环的线程和没有消息循环的线程,有消息循环的线程一般都会有一个Looper。事实上Android提供了一个封装好的带有looper的线程类,即为HandlerThread

 

四、实例1

 1 package app.com.myapplication;
 2 
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.os.Handler;
 6 import android.os.HandlerThread;
 7 import android.os.Looper;
 8 import android.os.Message;
 9 import android.widget.Toast;
10 
11 /**
12  *  Created by ${zyj} on 2016/2/15.
13  *
14  */
15 public class HandlerThreadActivity extends Activity {
16 
17     private HandlerThread handlerThread ;
18     private Handler handler;
19 
20     @Override
21     protected void onCreate(Bundle savedInstanceState) {
22         super.onCreate(savedInstanceState);
23 
24         // 1:创建一个HandlerThread,即创建了一个包含Looper的线程。
25         handlerThread = new HandlerThread("leochin.com");
26         handlerThread.start(); //创建HandlerThread后一定要记得start()
27 
28         //2:获取HandlerThread的Looper
29         Looper looper = handlerThread.getLooper();
30 
31         //3:创建Handler,通过Looper初始化
32         handler = new Handler(looper) {
33 
34             @Override
35             public void handleMessage(Message msg) {
36                 super.handleMessage(msg);
37                 int what = msg.what;
38                 Toast.makeText(HandlerThreadActivity.this, "hahah" + what , Toast.LENGTH_SHORT).show();
39             }
40         };
41 
42         //通过以上三步我们就成功创建HandlerThread。通过handler发送消息,就会在子线程中执行。
43         //如果想让HandlerThread退出,则需要调用handlerThread.quit();。
44         
45         //创建一个线程发送消息
46         new ChildThread().start();
47     }
48 
49     class ChildThread extends Thread {
50         @Override
51         public void run() {
52             super.run();
53             try {
54                 //在子线程中可以做一些耗时的工作
55                 sleep( 1000 );
56                 Message message = handler.obtainMessage();
57                 message.what = 3 ;
58                 handler.sendMessage(message);
59             }catch ( Exception e ){
60 
61             }
62         }
63     }
64 }

 

实例2

 1 package app.com.myapplication;
 2 
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.os.Handler;
 6 import android.os.HandlerThread;
 7 import android.os.Looper;
 8 import android.os.Message;
 9 import android.widget.Toast;
10 
11 /**
12  *  Created by ${zyj} on 2016/2/15.
13  *  HandlerThread继承于Thread,所以它本质就是个Thread。
14  *  与普通Thread的差别就在于,主要的作用是建立了一个线程,并且创立了消息队列,有来自己的looper,可以让我们在自己的线程中分发和处理消息。
15  */
16 public class HandlerThreadActivity2 extends Activity {
17 
18 
19     private MHandlerThread  mHandlerThread ;
20     private Handler handler ;
21 
22     @Override
23     protected void onCreate(Bundle savedInstanceState) {
24         super.onCreate(savedInstanceState);
25 
26         // 1:创建一个HandlerThread,即创建了一个包含Looper的线程。
27         mHandlerThread = new MHandler



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Android HandlerThread 消息循环机制之源码解析
  • android源码解析之(三)--)HandlerThread
  • HandlerThread,handlerthread用法

相关文章

  • 2017-05-26ListView添加头布局和脚布局,listview添加布局
  • 2017-05-26Android 手机卫士--导航界面4的业务逻辑,android卫士
  • 2017-05-26Android属性动画
  • 2017-05-26Android 手机卫士--绑定sim卡序列号,androidsim
  • 2017-05-26Android Bottom Sheet详解
  • 2017-05-26安卓DJ113舞曲网应用客户端 项目源码(服务器+客户端),安卓dj113
  • 2017-05-26Android versionCode和versionName的区别,androidversioncode
  • 2017-05-26使用ContentProvider访问非数据库数据
  • 2017-05-26Android中使用ImageViewSwitcher实现图片切换轮播导航效果,
  • 2017-05-26Android中Handler使用浅析,androidhandler

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • [android] 手机卫士绑定sim卡,androidsim
    • 5.2.4 Fragment实例精讲——底部导航栏+ViewPager滑动切换页面
    • android:Activity启动模式之singleTask(二)
    • Android中View自定义XML属性详解以及R.attr与R.styleable的区别
    • Couldn't load libPassword from loader:NDK开发中C文件编译成cpu的so类库时,找不到类库报错的原因之一,libpasswordndk
    • Android开发技巧之Camera拍照功能
    • 二维码Zxing&Zbar,zxing
    • 界面底部Tab实现,界面Tab实现
    • Android安全机制
    • Android学习笔记(28):三种选择器DatePicker_TimePicker_NumberPicker剖析

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有