Android中关于Handler looper参数设置问题
来源:互联网 发布:兼职数据录入员招聘 编辑:程序博客网 时间:2024/05/17 20:28
Android开发中会经常使用到Handler,Handler是Android里的一种异步回调机制,handler要执行还要基于一个Looper来实现,基本用法这里不做讨论
如此一来,就不会在占用主线程的Looper,也就不会卡主线程UI
主要讲一下一些常见的Handler使用问题。
我们可能会很容易看到如下一个Handler创建和初始化:
private Handler handler = new Handler(){ @Override public void dispatchMessage(Message msg) { switch (msg.what) { case MY_MSG1: {
<span style="white-space:pre"></span> //DO something break; } default: break; } }};
这个Handler创建在主线程和子线程中会有比较大的区别,如果创建在子线程中,则本身不能更新UI线程,更新UI线程会报错,而如果创建在主线程中,
里面又有耗时操作的话,又会卡UI。所以使用Hanlder还是有一些讲究的。
1. 主线程中创建Handler,但是有耗时操作
这个时候就应该创建HandlerThread来支持这个Handler,代码如下:
(方便查看,异常捕捉代码已经去掉)
handlerThread = new HandlerThread("mydefine.handler"); handlerThread.start();Looper lp = handlerThread.getLooper();handler = new Handler(lp);
如此一来,就不会在占用主线程的Looper,也就不会卡主线程UI
2. 子线程中创建Handler
子线程中创建使用,如果没有创建HandlerThread,直接使用会报没有Looper.prepare()的错误
所以可以直接调用:
handler = new Handler(Looper.getMainLooper());
通过Looper的getMainLooper来获取主线程的Looper,这样本身又可以更新UI.
但是前提是不能有耗时操作
3. 关于Activity退出
如果activity退出时,记得要关闭Handler,另外如果是创建了新的HandlerThread,则记得要调用
handlerThread.quit();函数来退出。
Hanlder本身需要调用 removeCallbacks和removeMessages来结束操作。
0 0
- Android中关于Handler looper参数设置问题
- 关于android Handler Message Looper的理解
- Android的Handler,Looper消息机制问题
- 浅谈android中Handler,Looper,Message
- Android 中Message,MessageQueue,Looper,Handler详解
- Android 中Message,MessageQueue,Looper,Handler详解
- Android中Looper/Handler学习笔记
- Android中Looper, Handler, MessageQueue的理解
- Android中Handler、Looper、Message、MessageQueue详解
- 关于Handler和Looper
- 关于Android中由 Thread 、Handler、MessageQueue、Looper组成的“线程间通信 套件” 的分析
- Android Handler/Looper/MessageQueue 在新线程中使用Handler
- 面试问题之:Android中消息系统模型和Handler Looper
- android looper handler 多线程
- Android handler looper
- android looper和handler
- android Looper Handler
- android Looper& Handler
- 处理样本分布不平衡,偏斜比较厉害的方法总结
- 多校联合第八场hdu5387Clock 最大公约数
- A. Vasya and Petya's Game(cf第一题)
- 黑马程序员——java基础知识篇——>异常总结
- 移动端事件
- Android中关于Handler looper参数设置问题
- SVN配置用户权限
- C语言中int到float的强制类型转换
- oracle
- 关于火狐浏览器 如何 屏蔽 优酷等网站的 广告问题 OpenGG.Clean.Player (转载)
- 配置python3+django+linux(centos的环境)
- opencv安装完成,测试时出现没有为opencv_core2410d.dll加载符号问题的解决
- RoboEarth 1
- (4.3.1.15)android.app.FragmentManager 与 android.support.v4.app.FragmentManager带来的若干Error