Androidのソケットが関与するアクティビティライフサイクルを処理する方法は?
-
05-10-2019 - |
質問
- Androidアクティビティがあり、スレッドを起動します。
- スレッドでは、永続的なTCPソケット接続を開きます。
- ソケットがサーバーに接続すると、動的データがダウンロードされます。
- このスレッドは、データが受信されたときにハンドラークラスを使用してアクティビティにメッセージを送信します。
これで、ユーザーがたまたまポートレートからランドスケープモードに切り替えた場合、アクティビティはOndestroyコールを受け取ります。この瞬間、私はソケットを閉じてスレッドを停止します。
Androidがランドスケープモードを切り替えたとき、それは再びOnCreateを呼び出し、私はソケットの再接続を行う必要があります。また、受信したアクティビティが受信したすべてのデータは、サーバーに以前に送信されたものを知る機能がないため、もう一度ダウンロードする必要があります。つまり、「履歴書」機能はありません。
したがって、問題は、ランドスケープモードが変更されたときに常にresしている多くのデータがあることです。
ここでの私の選択肢は何ですか?
- サーバーに向かってソケットトラフィックを処理するサービスを作成する場合、サーバーがサービスで送信したすべてのデータを常に取得します。
- または、おそらくランドスケープモードをすべて無効にする必要がありますか?
- または、私の最善の策は、非常に大きな仕事であるサーバーを書き直すことです:-)
すべての入力は大歓迎です:-)
/ヘンリック
解決
アクティビティの再起動を防ぐ(アクティビティは回転アンドロイドで再起動します)またはアプリケーションが管理するサービスを実装します。サービス方法は、私が見たアプリケーションに非常に人気があり、接続を解体するときにある程度の柔軟性を可能にします。
所属していません StackOverflow