一般的なシナリオだと思っていたものに対して、複数の解決策が与えられました。残念ながら、期待どおりに動作するものはないようです。
私はかなりシンプルなアンドロイドゲームを作成しました。ユーザーは友達を招待してプレイすることができ、ゲームのライフサイクル中にルーティングされるアクティビティがいくつかあります。すべてのターンとデータは、Web サービスを介してデータを公開しているリモート サーバーに保存されます。招待が送信されるか、対戦相手がターンを完了するたびに、ユーザーはサービスを介して自分のターンをプレイするように求められます。
このサービスは、標準の Android 通知を使用してユーザーに自分の番であることを通知します。ユーザーがゲームを表示しているときに、サービスが Web サービスをポーリングしたり、通知を表示したりしたくありません (ユーザーは、順番が来ているかどうかを既に知っています)。
次の解決策を試しましたが、成功しませんでした。
メイン アクティビティの onPause メソッドでサービスを開始し、メイン アクティビティの onResume メソッドでサービスを停止します。
- 問題 - ユーザーが別のアクティビティのためにアクティビティを離れるたびに、サービスが開始されます。ユーザーが何かを書いているか、招待状を作成している可能性があり、順番に進むように求められます。
各アクティビティをサービスにバインドし、すべてのアクティビティの同じ onPause/onResume メソッドでブール (実行中) フラグを設定します。
- 問題 - これは論理的に思えますが、何らかの理由でサービスが通知を表示しません。これはおそらくユーザー エラーですが、とにかくこれが正しい解決策かどうかはわかりません。
すべてのアクティビティの onPause メソッドでサービスを開始し、すべてのアクティビティの onResume メソッドでサービスを停止します。
- 問題 - サービスの状態を示す画面に提示しているトーストに基づいて、これは期待どおりに機能します。問題は、サービスがオフのときにユーザーに通知が表示されることです。どうやら私のトーストは誤解を招くようです。
どんな助けでも大歓迎です。サンプル コードは必須ではありませんが、上記の概念よりも複雑なソリューションを提供していただけると幸いです。
ありがとうございました。