关于避开轮询方法的方法
来源:互联网 发布:知乎 保银投资 编辑:程序博客网 时间:2024/05/17 18:02
我感觉这个题目并不是太准确,其实这篇博文主要就是想记录下来这种方法,感觉可以避开通过线程开启死循环来感知一个东西的状态。其实很简单,就是通过handler的sendEmptyMessageDelayed();方法来延迟发送消息,来达到定时更新UI的目的,如果知道的就可以略过下文了……。闲言少叙。
这段时间在做一个音乐播放器,其中有一个功能是显示当前播放的进度,是以00:00的方式显示的,但是在MediaPlay中并没有一个能监听当前进度改变的监听器,只有一个getCurrentPosition();来返回当前的时间进度。
第一个想到的方法就是开一个线程,然后再线程中开一个wihle循环,不停的获取时间,并sendHandler来更新这个TextView,但是总感觉这样做不靠谱,后来就开始发现手机屏幕就开始发烧了……找了很多帖子,无意间看到一个这样的方法:
通过handler的sendEmptyMessageDelayed()延迟发送一个消息来更新UI,然后再在handler中再次延迟发送,这样一直循环。
来源:http://www.cnblogs.com/dunning/archive/2012/08/28/2659778.html
Android内置Music播放器采取一个巧妙的办法,利用Handler的 sendMessageDelayed(Message msg, long delayMillis)方法,延迟发送修改UI的message,实现在UI主线程发送一个message来通知自己在n毫秒后刷新UI。这样可以节省一个线程的资源。
其中的next长整型就是下次刷新的间隔, queueNextRefresh用来发送message
private final Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { ... case REFRESH: long next = refreshNow(); queueNextRefresh(next); break; ... default: break; } } };
private void queueNextRefresh(long delay) { if (!paused) { Message msg = mHandler.obtainMessage(REFRESH); mHandler.removeMessages(REFRESH); mHandler.sendMessageDelayed(msg, delay); } }
- 关于避开轮询方法的方法
- unity3d个人写的检测障碍物并避开的方法
- Flash避开微软新ActiveX控件升级的方法
- flash 避开微软新ActiveX控件升级的方法
- 站长最应该避开的SEO优化作弊方法
- 局域网用户间避开gerrit高速传输Android Source Code的方法
- 【Flask】关于Flask-Admin的一些坑及避开技巧
- 关于学习的方法
- 关于方法的调用
- 关于方法的重载
- 关于方法的介绍
- 关于wifi的方法
- 关于方法的长度
- 关于查找方法(Find方法)的应用
- delphi 方法变量应避免一种写法,避开内部错误URW5369。
- 关于实例方法, 类方法和静态方法的思考
- 关于Gridview_rowcommand使用的方法
- 关于闰年的判断方法
- 行为型模式总结
- 关于vector.size()返回值
- 第二十四讲:泛型实例 - 专业\课程管理模块实现
- KVM虚拟机关闭
- Sed学习笔记
- 关于避开轮询方法的方法
- oracle中rollup和cube使用
- Spring JNDI之Tomcat配置
- Zookeeper源码分析(7)- SyncRequestProcessor
- NPOI 操作Excel
- JAVA内存泄露、溢出的检查方法、工具介绍
- Flex 中给LineChart的节点上显示数值
- JDK源码阅读之List和AbstractSequentialList
- 这几天写的连连看的思路和算法总结