私は社内で開発していますAndroid所属する会社のアプリです。アプリのさまざまな場所で、社内サーバーに接続する必要があります。このサーバーは、メンテナンスのため毎晩一定期間シャットダウンされますそのため、ご利用いただけない場合や、タブレットのWi-Fi接続が切断される場合があります。
タブレットがサーバーに接続できない場合(wi-fiがダウンしているため、またはサーバーがダウンしているため)、アプリをオフラインモードで動作させます-ライブデータを取得するのではなく、基本的にローカルデータベースのデータを表示しますサーバーデータベース。また、サーバーにアップロードされるすべてのデータは、オンラインに戻るまでキューに入れられる必要があります。
X秒ごとにチェックを実行してwi-fiが接続されているかどうかを確認するバックグラウンドサービスを用意することを検討しています。接続されている場合は、サーバーが利用可能かどうかを確認します(HTTP HEADリクエストを介して)。次に、ブロードキャストを送信して、オンラインかオフラインか、他のアプリがこのブロードキャストを受信して接続ステータスを保存できるかどうかを通知します。次に、サーバーへのアクセスを必要とするアプリでアクティビティが発生するたびに、まずステータスを確認して方法を決定できます行動する。
これの欠点は、サービスが常にバックグラウンドで実行され、パフォーマンスの問題/バッテリーの消耗を引き起こす可能性があることです。ただし、少しテストを行ったので、これの証拠はまだ見たことがありません。今まで問題でした。
だから私はこの方法が良いアイデアかどうか、そしてオンラインかオフラインかをチェックするより良い方法があるかどうか疑問に思っています。
あなたはラジオを事実上ずっとオンにしたままにしていて、これは間違いなくバッテリーを使い果たすでしょう。
しかし、あなたの動機はわかります。まともな妥協案は、アプリがオンラインでないことが判明しない限り、オンラインであると想定することです。そうでないことが判明した場合、そしてなりたいの場合、長い間隔で接続をポーリングし、時間が経過するにつれて長くなります。 1秒、5秒、15秒、1分、5分、15分。
さらに、ユーザーアクティビティの結果として、アプリがサーバーに接続しようとするたびに、試行を許可します。それは「私はオンラインですか?」ステータスは少し新しくなりました。モバイルアプリの設計には、ユーザーが無線をオンにするように要求したために無線がアクティブになったときに、バッテリーを浪費しないという一般原則があります。
最後に、UIが何らかの更新アクション(ボタンまたはプルダウンアクション)に対応できる場合は、必ず接続を試みてください。
注:iOSには、接続状態の変化についてアプリがオペレーティングシステムから通知を受ける機能があります。 Androidに同様の機能があるかどうかはわかりません。これの良い点は、OSが接続性チェックをいつ行うかを決定できることです(たとえば、他の何かのために無線がオンになっている場合など)。それでも、その接続の監視は、サーバーへの接続が試行されて失敗した場合にのみ行われます。
バックグラウンドサービスを使用しても、実際には役立ちません。問題は、wi-fiとサーバーのチェックに成功した後、オンラインデータを取得するための呼び出しを行っている間、それらがオンラインであることを確認できないことです。
より良い代替策は、ライブデータを取得しようとするだけで、これが失敗した場合はローカルデータを使用することです。したがって、コードのフローは常に同じです。