6

私はAndroid用のマルチプレイヤーゲームアプリを開発しています。参加者の1人がホスト(ゲームインスタンスを作成した人)として機能し、他の各参加者はBluetoothを使用してホストに接続しています。

私の質問は次のとおりです。このホストでは、通信するためにいくつかのスレッドが実行されており、開いているすべての接続を保持しています。アクティビティを一時的に破棄して後で復元できることを読みました。そのためにonSaveInstanceStateメカニズムを使用する必要があります。しかし、私はゲームの「サーバー」として機能し、他のクライアントにサービスを提供するオープンな接続とスレッドを備えたアプリについて話しています。OSが私のアクティビティを破棄することを決定した場合、これらの接続とスレッドはどうなりますか?彼らは終了しましたか?もしそうなら、これを適切に実装するために推奨されるパターンは何でしょうか?onSaveInstanceStateバンドルで接続を維持するにはどうすればよいですか?シリアル化できません。同じことがスレッドにも当てはまります、破棄時およびアクティビティが復元されたときに、それらを再作成して破棄する必要がありますか?このすべての状態を、ゲームの状態を表す静的クラスに保持するとどうなりますか?そうすると、OSは私のスレッド/接続を破壊しませんか?

SDKに付属しているサンプルのBluetoothチャットを確認しましたが、onSaveInstanceStateを処理できないため、どうすればよいかが非常に不明確です。

ありがとうございました!

4

1 に答える 1

7

OSが私のアクティビティを破棄することを決定した場合、これらの接続とスレッドはどうなりますか?

アクティビティでこれらのスレッドを作成した場合は、それらのスレッドを停止することをお勧めします。そうしないと、スレッドがリークします。

onSaveInstanceStateバンドルで接続を維持するにはどうすればよいですか?

できません。

同じことがスレッドにも当てはまります。破棄時とアクティビティの復元時にスレッドを再作成して破棄する必要がありますか?

もし彼らが活動によって始められたのなら、そうです、お願いします。

このすべての状態を、ゲームの状態を表す静的クラスに保持するとどうなりますか?そうすると、OSは私のスレッド/接続を破壊しませんか?

サーバーロジック(スレッド、接続、サーバー側のゲームロジック)をAndroidサービスに配置してください。ユーザーがサービスを停止できるアクティビティに簡単に戻ることができるように、途中でステータスバーにstartForeground()を入れて、そのサービスを継続するために使用してください。Notification

于 2010-11-06T09:51:31.653 に答える