android中HandlerThread的原理和用法讲解
2016-04-18 17:21
405 查看
android中HandlerThread继承了Thread,它是一种可以使用Handler的Thread,它的实现原理就是在run方法的内部用Looper.prepare()创建消息队列,然后通过Looper.loop()开启消息循环,这样的话我们就能用在HandlerThread中创建Handler来处理消息了,下面请看HandlerThread源代码中的run方法的实现:
从HandlerThread的run方法实现来看,它与Thread有很大的不同,普通的Thread它的run方法内部主要是执行一个耗时的操作,而HandlerThread主要是创建消息队列,然后用Handler消息处理机制来执行一个耗时的操作。
上述就是HandlerThread的实现原理。。。。接下来我们来看看怎样在平时的项目中使用HandlerThread,,直接上代码:
HandlerThread原理和用法分析到这里,哈哈,本人才疏学浅,如若有错误的地方,欢迎指教!
public void run() { mTid = Process.myTid(); Looper.prepare(); synchronized (this) { mLooper = Looper.myLooper(); notifyAll(); } Process.setThreadPriority(mPriority); onLooperPrepared(); Looper.loop(); mTid = -1; }
从HandlerThread的run方法实现来看,它与Thread有很大的不同,普通的Thread它的run方法内部主要是执行一个耗时的操作,而HandlerThread主要是创建消息队列,然后用Handler消息处理机制来执行一个耗时的操作。
上述就是HandlerThread的实现原理。。。。接下来我们来看看怎样在平时的项目中使用HandlerThread,,直接上代码:
package com.example.textdemo; import java.util.UUID; import android.support.v7.app.ActionBarActivity; import android.text.format.Time; import android.os.Bundle; import android.os.Handler; import android.os.HandlerThread; import android.os.Looper; import android.os.Message; import android.os.SystemClock; public class MainActivity extends ActionBarActivity { private MyHandler handler; public Handler mUIHandler = new Handler() { public void handleMessage(android.os.Message msg) { }; }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); HandlerThread thread = new HandlerThread(""); thread.start(); handler=new MyHandler(thread.getLooper()); //发送一个消息处理耗时 handler.sendEmptyMessage(0); } private class MyHandler extends Handler { public MyHandler(Looper lo) { super(lo); } @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); switch (msg.what) { case 0: //模拟一个耗时任务 SystemClock.sleep(3000); //处理完后可以用mUIHandler发送消息到UI线程更新UI mUIHandler.sendEmptyMessage(1); break; default: break; } } } }
HandlerThread原理和用法分析到这里,哈哈,本人才疏学浅,如若有错误的地方,欢迎指教!
相关文章推荐
- Android解析之三分钟教你快速掌握并使用GSON解析Json
- android内存泄露案例和解析
- AllJoyn+Android开发案例-android跨设备调用方法
- Android M 动态权限获取
- Android插件化框架研究-DroidPlugin
- Android Studio 如何打JAR包
- Android中程序与Service交互的方式——交互方式
- Android Bitmap与DrawAble与byte[]与InputStream之间的转换工具类
- Android从启动到程序运行发生的事情
- Android中程序与Service交互的方式——综述
- Android将应用log信息保存文件
- Android Studio开发可以使用的一些框架
- Android动画之TranslateAnimation使用
- Android媒体播放---Media playback
- android开发 AutoCompleteTextView自定义适配器
- android6.0(M)新特性
- android 各种开源控件,框架
- Android 线层池解析
- android 事件分发机制一
- Android Studio 获取SH1和MD5的方法