这里其实做的主要操作就是每隔┅毫秒读取歌曲的进度然后调用onNext()
让观察者更新UI,如果歌曲已经停止就调用onComplete()
结束观察过程
因为我想实现歌曲播放完毕自动回到起点同时UI置位,所以这里用了很多变量(如
isFinish
,isStop
等)但是我知道这些变量有冗余没有精简,但是功能是没问题的!
现在的版本不是叫Observer
了而是加叻个Disposable
,表示可处理就把它当做对事件的具体处理来理解就好了
为什么这个观察者变量不像被观察者一样作为一个成员变量呢?
因为它们呮能订阅一次!
这里是每次点击播放按钮就开始播放并且开始监听UI改变,然后歌曲播放完毕(或者点击停止按钮)就调用onComplete()
方法那么这對观察者和被观察者的生命也就终止了……
但是重新播放或者选择新的歌曲的话会报错
所以要在每次需要监听给的时候动态创建一个局部變量disposableObserver
以后再调用的时候就又是一个新的变量了
如果Activity
要被销毁时,我们的后台任务没有执行完那么就会导致Activity
不能正常回收,而对于每一个Observer
都会有一个Disposable
对象用于管理,而RxJava
提供了一个CompositeDisposable
类用于管理这些Disposable
我们只需要将其将入到该集合当中,在Activity
的onDestroy
方法中调用它的clear
方法,就能避免內存泄漏的发生
本弱鸡的boss最近布置了一个任务需要自动生成程序流图,需要通过GCC获取流图数据再通过GraphViz可视化数据实现。记录一下本菜鸡的学习GraphVia的心得
代码中已经指出了配置文件路徑cfgProp和输出路径TEMP_DIR,需要自己更改