我正在开发一个与手机的 WiFi、蓝牙、移动网络交互的应用程序。该应用程序主要是一个服务,GUI 不发挥核心作用。
应用程序的核心和服务类的主要方法是一个接收应用程序需要接收的所有意图的方法:
public void handleIntent(Intent intent){
然后它提取意图的动作并为相应意图的动作调用特定的处理程序方法,例如当接收到SCREEN_ON时,它会调用
private void handleScreenOn(){
问题是手机上的某些任务需要一些时间,因此在任务处理过程中可能会发生一些其他事件,那应该改变处理。
例如,打开 Wifi 需要几秒钟,在实际完成之前发送几个意图WIFI_STATE_CHANGED_ACTION 。在启用 WiFi 的过程中,用户可以关闭屏幕以便接收SCREEN_OFF意图。
现在说我的应用程序的目标是在屏幕关闭时关闭 WiFi。有一种情况会出现问题:
- 初始情况:屏幕开启,WiFi 关闭
- 用户切换 WiFi 设置以启用它。Wifi 开始启用
- 用户几乎立即关闭屏幕
- 应用收到 SCREEN_OFF 意图但由于 WiFi 尚未启用,因此它认为没有必要禁用它
- Wifi 启用完成,尽管屏幕关闭,Wifi 仍保持启用状态。
如何解决?
目前,在第 5 步中,当 Wifi 最终启用时,我会测试屏幕是否关闭以再次关闭 wifi。该解决方案需要许多 if / else 处理所有可能的情况。
我敢肯定,必须有一些更清洁的方法,处理一堆意图,或者类似的东西......
任何人都有一些好的设计模式或关于如何干净地完成它的好建议?