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并不适合,因为它只有一个线程,还得排队一个一个等着。

更多相关文章

  1. 消息驱动 Looper类
  2. input系统一 loop线程的创建与运行
  3. Android(安卓)常用工具
  4. Android存储系统之源码篇
  5. Android异步处理二:使用AsyncTask异步更新UI界面 .
  6. Android(安卓)并发之CountDownLatch、CyclicBarrier的简单应用(三
  7. Android事件处理之监听事件
  8. Android异步处理四:AsyncTask的实现原理
  9. Android异步处理四:AsyncTask的实现原理

随机推荐

  1. 生成android apikey
  2. android 设置Button或者ImageButton的背
  3. 解决:Failed to fectch URl https://dl-ss
  4. Android手机客户端与Servlet交换数据(by
  5. 修改android项目sdk版本的方法
  6. android中AudioRecord采集音频的参数说明
  7. android animation的两种应用实例
  8. Android学习之ProgressDialog
  9. Android中文API(128) —— HandlerThread
  10. List 去除一些默认设置