「アクティビティ ライフサイクルの管理」(http://developer.android.com/training/basics/activity-lifecycle/index.html) の記事を読んでいて、少し混乱しています。多分最初に、私のアプリケーションが何をするかを言おうとします。つまり、これはある種の http クライアントです。サーバーへのユーザー ログインとクライアント ストアの承認 (セッション ID)。ログイン後、TimerTask が実行され、10 秒ごとにサーバーからいくつかの小さな json が取得され、サーバーは認証キーがまだ生きていることを認識します (通常は 30 分間有効です)。このjsonには、ユーザーに表示する必要があるいくつかのイベント(これには通知マネージャーを使用しています)またはユーザーが回答する必要がある質問(「はい」、「いいえ」、「ドン」でカスタムダイアログを表示しています)が含まれる可能性がありますt know" を実行してから、回答をサーバーに POST します)。
これは、アプリケーションがフォアグラウンドにある場合は正常に機能しますが、アプリケーションが停止/一時停止している場合はどうすればよいかわかりません。
私の疑問:
- ユーザーがホームボタンをクリックしたり、別のアプリケーションが表示されたりしても、TimerTask が動作するようにしたい。2 つの理由があります。ただし、この記事では、アクティビティがフォアグラウンドにある場合、リソースを解放する必要があると述べています。どういう意味?制限とは何ですか?タイマーを停止する必要がありますか?
- ドキュメントによると、システムはアプリケーションが不要になったときにアプリケーションを強制終了できます。必要なくなった とはどういう意味ですか? ユーザーがそれを使用しない場合、またはアプリケーション コードがしばらく何もしない場合は? 私の TimerTask はアプリケーションを維持できますか?
- 認証キーを格納します。向きの変更などのシステムによってアクティビティが再作成される状況では、セッション ID を覚えておく必要があります。この SharedPreferences オブジェクトに使用しています。問題は、このオブジェクトを使用すると、キーがデータベースに保存され、アプリケーションが完全に閉じられたとき (「ログアウト」を意味する)、または方向が変更されたために再作成されたときに認識できないことです。これは、ユーザーが数時間後にアプリケーションを再度実行し、アクティビティがデッド セッション ID を復元した場合に発生します (承認変数が空ではなく、この状態をフラグとして使用しているため、アプリケーションは「ログイン済み」のように見えます)。SharedPreferences オブジェクトの一時的なバージョンが必要です。onSaveInstanceState で渡されたバンドル オブジェクトはどうですか? 一時的なものですか?
よろしく