私は携帯電話のWiFi、Bluetooth、モバイルネットワークと相互作用するアプリを開発しています。アプリは主にサービスであり、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で、Wi-Fiが最終的に有効になったときに、画面がオフになっているかどうかをテストして、Wi-Fiを再びオフにします。このソリューションでは、考えられるすべてのケースを処理するために多くのif/elseが必要です。
それを行うためのよりクリーンな方法、インテントのスタックの処理、またはこのようなものが必要だと確信しています...
良いデザインパターンやそれをきれいに行う方法についての良いアドバイスを持っている人はいますか?