博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android HandlerThread使用
阅读量:2389 次
发布时间:2019-05-10

本文共 1727 字,大约阅读时间需要 5 分钟。

package com.app;import android.os.Bundle;import android.os.Handler;import android.os.HandlerThread;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.util.Log;public class MainActivity extends AppCompatActivity {    private HandlerThread myHandlerThread ;    private Handler handler ;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //创建一个线程,线程名字:handler-thread        myHandlerThread = new HandlerThread( "handler-thread") ;        //开启一个线程        myHandlerThread.start();        //在这个线程中创建一个handler对象        handler = new Handler( myHandlerThread.getLooper() ){            @Override            public void handleMessage(Message msg) {                super.handleMessage(msg);                //这个方法是运行在 handler-thread 线程中的 ,可以执行耗时操作                Log.d( "handler " , "消息: " + msg.what + "  线程: " + Thread.currentThread().getName()  ) ;            }        };        //在主线程给handler发送消息        handler.sendEmptyMessage( 1 ) ;        new Thread(new Runnable() {            @Override            public void run() {             //在子线程给handler发送数据             handler.sendEmptyMessage( 2 ) ;            }        }).start() ;    }    @Override    protected void onDestroy() {        super.onDestroy();        //释放资源        myHandlerThread.quit() ;    }}

HandlerThread的特点

(1)HandlerThread将loop转到子线程中处理,说白了就是将分担MainLooper的工作量,降低了主线程的压力,使主界面更流畅。

(2)开启一个线程起到多个线程的作用。处理任务是串行执行,按消息发送顺序进行处理。HandlerThread本质是一个线程,在线程内部,代码是串行处理的。

(3)但是由于每一个任务都将以队列的方式逐个被执行到,一旦队列中有某个任务执行时间过长,那么就会导致后续的任务都会被延迟处理。

(4)HandlerThread拥有自己的消息队列,它不会干扰或阻塞UI线程。

(5)对于网络IO操作,HandlerThread并不适合,因为它只有一个线程,还得排队一个一个等着。

转载地址:http://lsxab.baihongyu.com/

你可能感兴趣的文章
Qt C++中的关键字explicit .
查看>>
qtcreator中常用快捷键
查看>>
PowerDesigner 简介
查看>>
VS2008快捷键大全
查看>>
Access 操作或事件已被禁用模式阻止
查看>>
C# 控件置于最顶层、最底层
查看>>
几个常见的压缩算法
查看>>
浮点数的存储
查看>>
点到线段的距离
查看>>
HTML_5_Canvas
查看>>
NuGet学习笔记(1)——初识NuGet及快速安装使用
查看>>
NuGet学习笔记(2)——使用图形化界面打包自己的类库
查看>>
C# 数据类型基础,堆栈,装箱与拆箱
查看>>
HTML 中的<div>
查看>>
C#中的static、readonly与const的比较
查看>>
Mysql Fabric实现学习笔记
查看>>
Spring JTA multiple resource transactions in Tomcat with Atomikos example
查看>>
How to setup multiple data sources with Spring and JPA
查看>>
MySQL 5.7 Fabric: any good?
查看>>
Accessing Fabric HA Groups from Java
查看>>