我正在开发一个与手机的WiFi,蓝牙,移动网络交互的应用程序。 该应用程序主要是一个服务,并且GUI不起主要作用。Android:异步事件(意图)处理的设计模式
应用的核心,而服务类的主要方法是接收该应用程序需要接收所有的意图了一个方法:
public void handleIntent(Intent intent){
它然后提取意图的行动,并呼吁具体对于相应的意图的动作处理方法,例如接收SCREEN_ON时,它会调用
private void handleScreenOn(){
问题是,手机上的一些任务需要一段时间,所以一些其他事件s可能发生在任务处理的中间,这应该改变处理。
例如,打开Wifi需要几秒钟的时间,在实际完成之前发送多个目标WIFI_STATE_CHANGED_ACTION。在启用WiFi的过程中,用户可以关闭屏幕,以便接收意图。
现在说我的应用程序的目标是在屏幕关闭时关闭WiFi。有一种情况会出现问题的情形:
- 初始情况:屏幕打开,无线网络是关
- 用户切换无线网络设置来启用它。无线上网开始被启用
- 用户立刻就变成屏幕关闭
- 该应用程序接收SCREEN_OFF意图,但由于无线网络还没有启用,则认为没有必要将其禁用
- 无线上网使被完成,无论屏幕关闭,Wifi都会保持启用状态。
如何解决?
目前,在步骤5中,当Wifi终于启用时,我会测试屏幕是否关闭或不再关闭wifi。 该解决方案需要许多if/else处理所有可能的情况。
我敢肯定,必须有这样做,处理堆栈意图,或者像这样的一些清洁的方式...
任何关于如何做到这一点干净一些很好的设计模式或好的建议?