[解決済み] Android 静的オブジェクトのライフサイクル
質問
イベント検索アプリケーションを作成しているのですが、ある画面で検索条件を設定すると、別の画面に反映され、3番目の画面でユーザーが検索条件を編集できるようになり、4番目の画面に移動するようになっています。
上記のタスクを達成するために、私はアプリケーションの周りの値を覚えている静的オブジェクトを使用しており、私は余分なことを行う必要はありません。
しかし、私は、Androidの静的オブジェクトのライフサイクルについて、メモリ不足が見つかった場合、Androidは静的オブジェクトを削除するかどうかを恐れている?
アンドロイドはマルチタスクをサポートしているので、ユーザーが別のアプリケーションに切り替えて、ユーザーが戻ってきたときにアプリケーションが狂ったように動作し始めた場合、マルチタスクのときに静的オブジェクトは削除されるのでしょうか。
どのように解決するのですか?
まず、背景を少し説明します。アプリケーションを起動するとどうなるのでしょうか。
OSはプロセスを開始し、一意のプロセスIDを割り当て、プロセステーブルを割り当てます。プロセスはDVM(Dalvik VM)のインスタンスを開始し、各アプリケーションはDVM内で実行されます。
DVMは、クラスのロード、アンロード、インスタンスのライフサイクル、GCなどを管理する。
スタティック変数のライフタイム。静的変数は、クラスがJVMによってロードされたときに存在するようになり、クラスがアンロードされたときに終了します。
そのため、アンドロイドアプリケーションを作成し、スタティック変数を初期化した場合、以下のいずれかが起こるまでJVMに残ります。
1. クラスがアンロードされる
2. JVMがシャットダウンされる
3. プロセスが終了する
なお、static変数の値は、他のアプリケーションの別のアクティビティに切り替えても、上記3つのいずれにも該当しない場合、保持されます。万が一、上記3つのいずれかが発生した場合、staticの値は失われます。
数行のコードでこれをテストすることができます。
- アクティビティーのonCreateで、初期化されていないスタティックを表示します。
- staticを初期化し、それを表示する -> 値はnull以外となります。
- バックボタンを押して、ホーム画面に移動します。注:ホーム画面は別のアクティビティです。
- アクティビティを再度起動する -> 静的変数が非NULLになる
- DDMSからアプリケーションのプロセスを終了させる。
- アクティビティを再スタートします。
お役に立てれば幸いです。
関連
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み] Androidの「コンテキスト」とは何ですか?
-
[解決済み] 静的クラスとシングルトンパターンの違い?
-
[解決済み] C言語における「static」の意味とは?
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
-
[解決済み] AsyncTaskを複数回実行する
-
[解決済み] 文字サイズとアンドロイドの画面サイズの違い
-
[解決済み] 文字列リソースにHTML?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 設定ページに移動せずに位置情報サービスをオンにする
-
[解決済み] アンドロイドフラグメント onRestoreInstanceState
-
[解決済み] 深くネストされたスタックから離れるとき、Fragmentのバックスタックをクリーンアップする方法はこれで良いのでしょうか?
-
[解決済み] Androidのソースコードにある@hideの意味とは?
-
[解決済み] アプリ内課金テスト:android.test.purchased already owned
-
[解決済み] これはどういうことですか?失敗 [INSTALL_FAILED_CONTAINER_ERROR]?
-
[解決済み] Gradleでビルドタイプを使用し、ContentProviderを使用する同じアプリを1つのデバイスで実行する。
-
[解決済み] ProjectScopeServices に Factory タイプのサービスはありません。
-
[解決済み] BottomNavigationViewを新しいNavControllerで使用する際に、フラグメントを生かす方法はありますか?
-
[解決済み] Recyclerviewと異なるタイプの行のインフレーションの処理