Android HandlerThread使用方法详解

 更新时间:2017年10月24日 15:37:59   作者:chuyouyinghe  
这篇文章主要介绍了Android HandlerThread使用方法详解的相关资料,通过本文希望能帮助到大家,让大家掌握理解这部分内容,需要的朋友可以参考下

Android HandlerThread使用方法详解

HandlerThread 继承自Thread,内部封装了Looper。

首先Handler和HandlerThread的主要区别是:Handler与Activity在同一个线程中,HandlerThread与Activity不在同一个线程,而是别外新的线程中(Handler中不能做耗时的操作)。

用法:

import android.app.Activity;  
import android.os.Bundle;  
import android.os.Handler;  
import android.os.Handler.Callback;  
import android.os.HandlerThread;  
import android.os.Message;  
  
  
public class MainActivity extends Activity {  
  HandlerThread handlerThread = new HandlerThread("test");  
  Handler handler;  
    
  @Override  
  protected void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.activity_main);  
    System.out.println("cur_id="+Thread.currentThread().getId());  
      
    handlerThread.start();  
    System.out.println("handlerThread.id=" + handlerThread.getId());  
    //post(runnable),只是直接运行了run(),run()内ThreadId与UIThread是一样的  
//   handler = new Handler();   
    //post(runnable),将runnable运行在handlerThread中,这是非UIThread的  
    handler = new Handler(handlerThread.getLooper(), new Callback() {  
        
      @Override  
      public boolean handleMessage(Message msg) {  
        System.out.println("receive message.whatA=" + msg.what);  
        if (msg.what == 1) {  
          return true;//不再向外层传递  
        } else {  
          return false; //外层的handleMessage() 继续执行  
        }  
          
      }  
    }) {  
      @Override  
      public void handleMessage(Message msg) {  
        // TODO Auto-generated method stub  
        super.handleMessage(msg);  
        System.out.println("receive message.whatB=" + msg.what);  
      }  
    };  
    handler.post(new Runnable() {  
        
      @Override  
      public void run() {  
        System.out.println("handler_post_cur_id="+Thread.currentThread().getId());  
        handler.sendEmptyMessage(1);  
        handler.sendEmptyMessage(2);  
      }  
    });  
      
  }  
  
}  

运行结果:

01-23 07:12:31.590: I/System.out(12386): cur_id=1  
01-23 07:12:31.590: I/System.out(12386): handlerThread.id=1866  
01-23 07:12:31.590: I/System.out(12386): handler_post_cur_id=1866  
01-23 07:12:31.600: I/System.out(12386): receive message.whatA=1  
01-23 07:12:31.600: I/System.out(12386): receive message.whatA=2  
01-23 07:12:31.600: I/System.out(12386): receive message.whatB=2  

如有疑问请留言或到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • Android自定义Button并设置不同背景图片的方法

    Android自定义Button并设置不同背景图片的方法

    这篇文章主要介绍了Android自定义Button并设置不同背景图片的方法,涉及Android自定义控件的功能实现与布局相关技巧,需要的朋友可以参考下
    2016-01-01
  • Android游戏开发学习②焰火绽放效果实现方法

    Android游戏开发学习②焰火绽放效果实现方法

    这篇文章主要介绍了Android游戏开发学习②焰火绽放效果实现方法,以实例形式详细分析了Android中粒子对象类Particle类和粒子集合类ParticleSet类及物理引擎ParticleThread类 的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10
  • Android滑动冲突的完美解决方案

    Android滑动冲突的完美解决方案

    在Android开发中滑动冲突可以说是比较常见的一类问题,也是比较让人头疼的一类问题,两个原本完美的控件,组合在一起之后,忽然发现整个世界都不好了。滑动冲突主要分为同方向滑动冲突和不同方向滑动冲突,下面本文将详细说明两种滑动冲突如何解决。
    2016-08-08
  • Android从源码的角度彻底理解事件分发机制的解析(上)

    Android从源码的角度彻底理解事件分发机制的解析(上)

    这篇文章主要介绍了Android从源码的角度彻底理解事件分发机制的解析,具有很好的参考价值,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • Android 下载文件通知栏显示进度条功能的实例代码

    Android 下载文件通知栏显示进度条功能的实例代码

    这篇文章主要介绍了Android 下载文件通知栏显示进度条功能的实例代码,通过使用AsyncTask异步任务实现,调用publishProgress()方法刷新进度来实现,具体代码大家参考下本文
    2018-04-04
  • Android编程实现支持拖动改变位置的图片中叠加文字功能示例

    Android编程实现支持拖动改变位置的图片中叠加文字功能示例

    这篇文章主要介绍了Android编程实现支持拖动改变位置的图片中叠加文字功能,可实现Android图片与文字动态操作功能,涉及视图及图片动态运算相关操作技巧,需要的朋友可以参考下
    2017-01-01
  • kotlin中使用ViewBinding绑定控件的方法

    kotlin中使用ViewBinding绑定控件的方法

    View Binding是Android Studio 3.6推出的新特性,主要用于减少findViewById的冗余代码,但内部实现还是通过使用findViewById,这篇文章主要介绍了kotlin中使用ViewBinding绑定控件,需要的朋友可以参考下
    2024-03-03
  • Android拍照或从图库选择图片并裁剪

    Android拍照或从图库选择图片并裁剪

    这篇文章主要介绍了Android拍照或从图库选择图片并裁剪的相关资料,具有一定的参考价值,需要的朋友可以参考下
    2016-08-08
  • Android系统检测程序内存占用各种方法

    Android系统检测程序内存占用各种方法

    这篇文章主要介绍了Android系统检测程序内存占用各种方法,本文讲解了检查系统总内存、检查某个程序的各类型内存占用、检查程序状态、检查程序各部分的内存占用等内容,需要的朋友可以参考下
    2015-03-03
  • Android读取本地图库与调用摄像头拍摄

    Android读取本地图库与调用摄像头拍摄

    这篇文章主要为大家详细介绍了Android读取本地图库与调用摄像头拍摄,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04

最新评论