缘由
做一个蓝牙方面的 APP,需要在系统进入休眠之前关闭蓝牙,在系统唤醒之后开启蓝牙。是否由这个系统事件来触发蓝牙的开与关?(开关广播,增删服务)
思考
虽然从表面上来看,将这个系统事件作为蓝牙的开关是自然而然的,把它写出来:
系统事件-->APP 中蓝牙的开关
怎么看上述关系都是很别扭的。仔细思考后,实际上有三个时间点来作这个开关:
- 系统事件时间点
- APP 本身的活动时间点
- 蓝牙状态变化时间点
可能这三个事件本身有一定的因果关系,但是是层层递进的,是有层次的。将蓝牙的想着设定放在系统级和 APP 级都是不合适的,放在蓝牙状态反转时最合适。
结论
- 相应的事件处理要放在相应级别的状态的切换点。
- 即使相应级别状态反转由其它层级决定,也应该增加相应的抽象。
上一点作一下解释:
层级 A状态变化-->层级 B状态变化,有一事件 层级B 的处理函数 SomeFunc()。若层级 B 没有相应的状态标识,自然想到的处理逻辑就是:
func stateAChange(){
switch stateA{
case1: //code
case2: //code
...
}
}
但是这个逻辑不明确,应该增加相应的抽象层,抽象出一个层级 B 的状态指示标识。
func stateAChange(){
switch stateA{
case1: stateB = //
case2: stateB = //
...
}
}
func stateBChange(){
//code
}
网友评论