前言
本篇是小编在处理股票价格的定时刷新以及从非交易时间到交易时间过渡时重新唤醒定时刷新的技术总结。
技术方案
Intent.ACTION_TIME_TICK
通过动态注册Intent.ACTION_TIME_TICK这个广播。系统每分钟会发出该广播。 关于Intent.ACTION_TIME_TICK,官方的注释是这样的:1
2
3
4
5Added in API level 1
String ACTION_TIME_TICK
Broadcast Action: The current time has changed. Sent every minute. You cannot receive this through components declared in manifests, only by explicitly registering for it with Context.registerReceiver().
This is a protected intent that can only be sent by the system.
Constant Value: "android.intent.action.TIME_TICK"
简单来讲就是每隔1分钟,系统会发出该广播。该广播不能静态注册在manifests文件中,只能使用Context.registerReceiver()动态注册。而且该广播是一个protected类型的广播,只能由系统跳用发出该广播,用户无权发出该广播。
知道了这些,就可以注册操作了。以实现时间段切换的需求。
1 | Receiver mTimeTickReceiver = new BroadcastReceiver() { |
该方式可以在单独的进程中使用,也可以在单独的界面中注册使用。
定时器方式
定时器方式常见的有:Handler,Timer, Thread, AlarmManager等。 这里我想详细介绍一个RxJava提供的方式,Observable.interval()。 小编就编写一个简单Fragment基类来实现该操作。
具体代码如下:
1 | /** |
TimeManager请参考Android时间与服务器同步方案
RxJava 还提供了Observable.timer()方式的定时器。