HandlerThread使用

HandlerThread使用优点 1 制作一个后台异步线程 需要的时候可以丢一个任务给它 使用灵活 2 可以避免项目中随处可见的 newThread start 增加系统开销 3 可以代替 Thread looper handlerd 的写法缺点 1 不要执行太耗时的任务 此种情况就用线程池吧 http blog csdn net android xue article details 6289

优点:

1.制作一个后台异步线程,需要的时候可以丢一个任务给它,使用灵活

2.可以避免项目中随处可见的new Thread().start(),增加系统开销

3.可以代替Thread+looper+handlerd的写法

缺点:

1.不要执行太耗时的任务(<= 100ms),如果太耗时可能会阻塞其他任务

(此种情况就用线程池吧:http://blog.csdn.net/android_xue/article/details/)

2.要自己控制好合适的生命周期,启动和结束都要自己控制

public class HandlerThreadUtil { private static HandlerThread mHandlerThread; private static Looper mLooper; public static Handler initHandlerThread(String threadName) { mHandlerThread = new HandlerThread(threadName); //一定要手动开启  mHandlerThread.start(); //获取Looper  mLooper = mHandlerThread.getLooper(); if (mLooper != null) { //返回当前线程的Handler  return new Handler(mLooper); } return null; } //由于HandlerThreadrun方法是一个无限循环,  // 因此当明确不需要使用HandlerThread  // 的时候,应该终止线程执行  public static void cancle() { mLooper.quit(); } }
public class MainActivity extends AppCompatActivity { public static final int TV = 0; private Handler mCallBackHandler; private TextView tv; private Handler mHanlder = new Handler() { @Override  public void handleMessage(Message msg) { switch (msg.what) { case TV: tv.setText("修改好了......"); break; } } }; @Override  protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView) findViewById(R.id.tv); //获取HandlerThread实例  mCallBackHandler = HandlerThreadUtil.initHandlerThread("firstThread"); //外界需要通过Handler的消息方式通知HandlerThread执行一个具体任务  mCallBackHandler.post(new myRunnable()); } class myRunnable implements Runnable { @Override  public void run() { try { Thread.sleep(3000); Message message = Message.obtain(); message.what = TV; mHanlder.sendMessage(message); } catch (InterruptedException e) { e.printStackTrace(); } } } @Override  protected void onDestroy() { super.onDestroy(); //手动结束线程  HandlerThreadUtil.cancle(); } }


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233853.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • c# 键盘钩子

    c# 键盘钩子usingSystem;usingSystem.Collections.Generic;usingSystem.Diagnostics;usingSystem.Runtime.InteropServices;usingSystem.Text;namespaceKeyboardHookPro{publicclassScanerHook{publicdelegatevoidScanerDelegate(ScanerCodescodes)

    2022年6月10日
    27
  • 【Windows11来了】立刻安装Windows11预览版抢先体验(虚拟机 | 含详细安装步骤)

    【Windows11来了】立刻安装Windows11预览版抢先体验(虚拟机 | 含详细安装步骤)本文介绍了使用虚拟机安装Windows11预览版操作系统的过程,并体验了一下新系统

    2022年7月16日
    15
  • [Matlab]绘图颜色[通俗易懂]

    [Matlab]绘图颜色[通俗易懂][Matlab]绘图颜色修改或规定Matlab中几何图形的颜色,对颜色可以有四种描述方法,分别是:颜色名称、短名称、RGB三元组、十六进制颜色代码。Matlab中较美观的颜色(RGB三元组)%%适用于Matlab的RGB颜色[0.00,0.45,0.74]//蓝[0.85,0.33,0.10]//橙红[0.93,0.69,0.13]//橙黄[0.72,0.27,1]//淡紫[0.47,0.67,0.19]//淡绿……待补充Matlab语言%%对点scat

    2022年5月31日
    47
  • @Android属性动画完全解析

    @Android属性动画完全解析转载:http://blog.csdn.net/guolin_blog/article/details/43536355在手机上去实现一些动画效果算是件比较炫酷的事情,因此Android系统在一开始

    2022年7月3日
    21
  • 使用Vue写一个登录页面

    使用Vue写一个登录页面上一博客讲到构建了一个vue项目,现在在那个项目之上实现一个登录页面。1.构建项目的目录2.App.vue&lt;template&gt;&lt;divid="app"&gt;&lt;router-view/&gt;&lt;/div&gt;&lt;/template&gt;&lt;script&gt;exportdefault{

    2022年5月21日
    115
  • mvc(1)——新建一个ASP.NET MVC项目

    mvc(1)——新建一个ASP.NET MVC项目一、新建一个空MVC项目  对于mvc的应用,我想第一步就应该是建立一个mvc项目了。废话不说了,直接上。  在“File(文件)”菜单中选择“New(新建)”——“Project(项目)”  打开“NewProject(新项目)”对话框。如果在左侧”VisualC#”目录树中选择”Web”模板,会看到”ASP.NETWebApplication(ASP.NETWeb应用程序)”项…

    2022年7月15日
    13

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号