Android HandlerThread的用法

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

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

用法:

[java] view
plain
copyprint?

  1. import android.app.Activity;
  2. import android.os.Bundle;
  3. import android.os.Handler;
  4. import android.os.Handler.Callback;
  5. import android.os.HandlerThread;
  6. import android.os.Message;
  7. public class MainActivity extends Activity {
  8. HandlerThread handlerThread = new HandlerThread("test");
  9. Handler handler;
  10. @Override
  11. protected void onCreate(Bundle savedInstanceState) {
  12. super.onCreate(savedInstanceState);
  13. setContentView(R.layout.activity_main);
  14. System.out.println("cur_id="+Thread.currentThread().getId());
  15. handlerThread.start();
  16. System.out.println("handlerThread.id=" + handlerThread.getId());
  17. //post(runnable),只是直接运行了run(),run()内ThreadId与UIThread是一样的
  18. //      handler = new Handler();
  19. //post(runnable),将runnable运行在handlerThread中,这是非UIThread的
  20. handler = new Handler(handlerThread.getLooper(), new Callback() {
  21. @Override
  22. public boolean handleMessage(Message msg) {
  23. System.out.println("receive message.whatA=" + msg.what);
  24. if (msg.what == 1) {
  25. return true;//不再向外层传递
  26. } else {
  27. return false; //外层的handleMessage() 继续执行
  28. }
  29. }
  30. }) {
  31. @Override
  32. public void handleMessage(Message msg) {
  33. // TODO Auto-generated method stub
  34. super.handleMessage(msg);
  35. System.out.println("receive message.whatB=" + msg.what);
  36. }
  37. };
  38. handler.post(new Runnable() {
  39. @Override
  40. public void run() {
  41. System.out.println("handler_post_cur_id="+Thread.currentThread().getId());
  42. handler.sendEmptyMessage(1);
  43. handler.sendEmptyMessage(2);
  44. }
  45. });
  46. }
  47. }

运行结果:

[java] view
plain
copyprint?

  1. 01-23 07:12:31.590: I/System.out(12386): cur_id=1
  2. 01-23 07:12:31.590: I/System.out(12386): handlerThread.id=1866
  3. 01-23 07:12:31.590: I/System.out(12386): handler_post_cur_id=1866
  4. 01-23 07:12:31.600: I/System.out(12386): receive message.whatA=1
  5. 01-23 07:12:31.600: I/System.out(12386): receive message.whatA=2
  6. 01-23 07:12:31.600: I/System.out(12386): receive message.whatB=2
时间: 2024-10-28 18:34:28

Android HandlerThread的用法的相关文章

android点滴之HandlerThread的用法

bochs调试的有些命令根据版本好像有变化,我在ubuntu下安装了bochs-2.4.6,发现和bochs-2.3.6命令出现区别,在2.3.6版本支持dump_cpu.info r等命令,在我安装的2.4.6版本中不支持这两个命令,后面在使用bochs的过程中会陆续总结一些2.4.6支持的命令,最简单的方法是通过help来获取,下面先记录一些常用的: r 查看通用寄存器 sreg 查看段寄存器(IDTR被归到这里) creg 查看系统寄存器(CR0等) x 查看内存(线性地址) xp 查看内

android hander 线程用法

@Override public void onClick(View v) { lsh = "576"; startdate = setstart_date.getText().toString(); enddate = setend_date.getText().toString(); btnLoginContext = v.getContext(); HandlerThread handlerThread = new HandlerThread("handlerThrea

Android WIFI 简单用法

随着Wifi的普及,在开发App的时候对wifi的考虑越来越多了.例如程序的升级在wifi下可以省很多流量,在通信软件中的视频通话.可以实现高画质的传输等等,Android提供了WifiManager类来帮助开发者们管理Wifi.下面就简单来说一下WifiManager的简单用法把. 权限: 为了使用WfiManager 我们需要在Androidmanifest.xml 加入权限: //本例中使用了前两个.具体请按照需要添加权限. <uses-permission android:name=&quo

Android multipartentity的用法

最近写一个程序,android手机端上传多个图片到asp.net服务器端,使用httpclient,在网上查到了使用multipartentity.上传测试时总是出现(500)Internal Server Error,最后查出原来是文件大小超出了服务器限制,在项目的web.config中添加: <system.web> <HttpRuntime maxRequestLength="409600"  executionTimeout="60" /&

Android之Fragment用法

本文翻译自Android developer网站上面,原文参考:Building a Dynamic UI with Fragments 当我们需要动态的多界面切换的时候,就需要将UI元素和Activity融合成一个模块.在2.3中我们一般通过各种Activity中进行跳转来实现多界面的跳转和单个界面动态改变.在4.0或以上系统中就可以使用新的特性来方便的达到这个效果--Fragment类.Fragment类似一个嵌套Activity,可以定义自己的layout和自己的生命周期. 多个Fragm

Android TabHost(简易用法)

前言 欢迎大家我分享和推荐好用的代码段~~ 声明          欢迎转载,但请保留文章原始出处: CSDN:http://www.csdn.net 雨季o莫忧离:http://blog.csdn.net/luckkof 正文 Tab应用的结构 TabHost的Activity的结构如下: <?xml version="1.0" encoding="utf-8"?> <!-- 定义TabHost组件 --> <LinearLayout

Android之Adapter用法总结

http://blog.csdn.net/fznpcy/article/details/8658155 Android之Adapter用法总结 1.概念 Adapter是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带.在常见的View(List View,Grid View)等地方都需要用到Adapter.如下图直观的表达了Data.Adapter.View三者的关系: Android中所有的Adapter一览: 由图可以看到在Android中与Adapter有关

Android之Adapter用法总结(转)

Android之Adapter用法总结 1.概念 Adapter是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带.在常见的View(List View,Grid View)等地方都需要用到Adapter.如下图直观的表达了Data.Adapter.View三者的关系: Android中所有的Adapter一览: 由图可以看到在Android中与Adapter有关的所有接口.类的完整层级图.在我们使用过程中可以根据自己的需求实现接口或者继承类进行一定的扩展.比较常用

Android ListView的用法

ListView是比较常用的控件,但一直都觉得创建ListView步骤有点繁琐,故在此总结一下,方便查阅. 程序效果是实现一个ListView,ListView里面有标题,内容和图片,并加入点击和长按响应. 首先在xml里面定义一个ListView Xml代码   <?xml version="1.0" encoding="utf-8"?> <LinearLayout android:id="@+id/LinearLayout01&quo