Handler,Thread 和HandlerThread三者之间关系
来源:互联网 发布:女权运动 知乎 编辑:程序博客网 时间:2024/06/08 10:05
1.Handler 是Android中消息的分发机制,它把消息加入到一个队列中(MessageQueue),并分发和处理该消息队列中的消息,从面实现在子线程中更新主线程中UI的操作。
2.Thread 是线程,一般做一些耗时的操作的时候可以开启一个线程,线程的状态一般包括:创建,就绪,运行,阻塞,等待,死亡。
3.HandlerThread 这个我也是最近听说的,之前没有怎么用过,其实本质上还是一个Thread,它继承了Thread,只是在它的内部使用了建立了Looper,可以让我们在自己的线程中进行消息的分发和处理。
它的常规用法:
mThread = new HandlerThread("fang");
mHandler = new Hanlder(mThread.getLooper()){ ..handleMessage(String msg)...}
mThread.start();
4.我实现了一个简单的小Demo,实现实时更新当前的北京时间:
public class HandlerThreadActivity extends AppCompatActivity { private TextView mTvServiceInfo; private boolean isUpdateInfo; private Handler mHandler = new Handler(); private HandlerThread mCheckThread; private Handler mCheckHandler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_handler_thread); initBackThread(); mTvServiceInfo = (TextView)findViewById(R.id.textview); } private void initBackThread() { mCheckThread = new HandlerThread("check-message-coming"); mCheckThread.start(); mCheckHandler = new Handler(mCheckThread.getLooper()){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); checkForUpdate(); if (isUpdateInfo){ mCheckHandler.sendEmptyMessageDelayed(0x01,1000); } } }; } private void checkForUpdate() { try { mHandler.post(new Runnable() { @Override public void run() { Calendar ca = Calendar.getInstance(); int year = ca.get(Calendar.YEAR);//获取年份 int month=ca.get(Calendar.MONTH);//获取月份 int day=ca.get(Calendar.DATE);//获取日 int minute=ca.get(Calendar.MINUTE);//分 int hour=ca.get(Calendar.HOUR);//小时 int second=ca.get(Calendar.SECOND);//秒 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); mTvServiceInfo.setText("当前北京时间:"+sdf.format(ca.getTime())); } }); } catch (Exception e) { e.printStackTrace(); } } @Override protected void onResume() { super.onResume(); isUpdateInfo = true; mCheckHandler.sendEmptyMessage(0x01); } @Override protected void onPause() { super.onPause(); isUpdateInfo = false; mCheckHandler.removeMessages(0x01); } @Override protected void onDestroy() { super.onDestroy(); mCheckThread.quit(); }}
5.以下是HandlerThread的源码 :
class HandlerThread extends Thread { int mPriority; int mTid = -1; Looper mLooper; public HandlerThread(String name) { super(name); mPriority = Process.THREAD_PRIORITY_DEFAULT; } protected void onLooperPrepared() { } @Override public void run() { mTid = Process.myTid(); Looper.prepare(); synchronized (this) { mLooper = Looper.myLooper(); notifyAll(); } Process.setThreadPriority(mPriority); onLooperPrepared(); Looper.loop(); mTid = -1; }
public Looper getLooper() { rn mLooper; }}6.大概就这么多吧,还在继续学习中。。。。
阅读全文
0 0
- Handler,Thread 和HandlerThread三者之间关系
- Thread、Handler和HandlerThread关系何在?
- Thread、Handler和HandlerThread关系何在
- HandlerThread和Handler之间的关系
- Android中Handler Thread(HandlerThread) Runnable之间的关系
- Handler、HandlerThread、AsyncQueryHandler三者的关系
- Looper、Message、Handler和HandlerThread之间的关系
- Handler、HandlerThread、Message之间的关系理解
- 深入学习理解 Handler HandlerThread AsyncQueryHandler 三者的关系
- 深入学习理解 Handler HandlerThread AsyncQueryHandler 三者的关系
- 深入学习理解 Handler HandlerThread AsyncQueryHandler 三者的关系
- Handler+Thread和HandlerThread的用法比较
- Handler+Thread和HandlerThread的用法比较
- Handler、Thread和HandlerThread的差别
- Handler、Thread和HandlerThread的差别
- HandlerThread,Handler,Thread使用方法
- HandlerThread,Handler,Thread使用方法
- HandlerThread,Handler,Thread使用方法
- C++11右值引用
- redis集群扩容
- leetcode344. Reverse String
- ecmall 支付成功订单状态没有改变解决办法
- QML TEXT元素
- Handler,Thread 和HandlerThread三者之间关系
- 各种语言HMAC SHA256实现
- 剑指offer_数组---旋转数组的最小数字
- Nginx服务器中的location配置详解
- 关于客户登录案例的思考
- git基础操作
- socket与http的区别
- python zip函数
- ndoejs+mongodb 开发5:批量修改