5

私は基本的に Android ドキュメントで利用可能なフラグメント デモの変更である単純な Android アプリケーションを書いています。アプリには、Headlines と呼ばれる文字列の静的な ArrayList を持つ Ipsum.java というファイルがあります。

メイン アクティビティの onCreate() メソッドには、いくつかの要素を配列リストに追加する次のコードがあります。

    if (savedInstanceState == null){
        Ipsum.Headlines.add("String 1 ");
        Ipsum.Headlines.add("String 2");
    }

savedInstanceState は、アプリが非アクティブな状態から再開されている場合に、システムがメソッドに渡す Bundle です。ロジックは、savedInstanceState が null の場合、アプリは再開されず、新しいインスタンスとして開始されるというものです。

「ホーム」ボタンを使用してアプリを離れ、アプリに再度入ると、arrayList には「文字列 1」と「文字列 2」の 2 つの要素のみが含まれます。(これは望ましい動作です)

ただし、戻るボタンを使用してアプリを離れ、アプリに再度入ると、「文字列 1」要素と「文字列 2」要素が再び追加されます。配列には 4 つの要素があります。

String 1
String 2
String 1
String 2

(arrayList の内容は、listView への入力に使用されるため、表示できます)戻るボタンが押されたときにアプリが静的配列リストの内容を格納しているようです..そして、バンドルが onCreate に渡されていません。 () アプリ再起動時のメソッド。アプリのライフサイクルに関して、ここで何が起こっているのか誰か説明できますか?

4

3 に答える 3

12

これはあなたを助けるかもしれません:

少し背景から始めましょう:アプリケーションを起動するとどうなりますか?

OS はプロセスを開始し、一意のプロセス ID を割り当て、プロセス テーブルを割り当てます。プロセスは DVM (Dalvik VM) のインスタンスを開始します。各アプリケーションは DVM 内で実行されます。DVM は、クラスのロード、アンロード、インスタンスのライフサイクル、GC などを管理します。

静的変数の有効期間:静的変数は、クラスが によってロードされたときに存在しJVM、クラスがアンロードされたときに消滅します。

したがって、Android アプリケーションを作成して静的変数を初期化すると、次のいずれかが発生するまで JVM に残り
ます。1. クラスがアンロードさ
れる 2. JVM がシャットダウンする
3. プロセスが終了する

別のアプリケーションの別のアクティビティに切り替えても、静的変数の値は保持され、上記の 3 つのいずれも発生しないことに注意してください。上記の 3 つのいずれかが発生した場合、スタティックはその値を失います。

詳細については、このリンクでSamuhの回答をお読みください...ここをクリック

于 2013-08-05T04:27:40.713 に答える
2

あなたの活動は再開されています。何が起こるかを制御したい場合は、実装してonResume()ください。

詳細については、アクティビティ ライフサイクルの管理を参照してください。

編集:

静的変数は Java の概念です。staticjust は、クラス全体で変数のコピーが 1 つしかないことを意味します。別の方法は、各オブジェクトが独自のコピーを持つことです。

したがって、コードの実行中は、プログラム内に変数のコピーが 1 つだけ存在します。コードを追加しない限り、どこにも保存されません。

于 2013-08-05T04:18:48.603 に答える
0

静的変数はクラスに関連付けられており、クラスがメモリ内にある限り存続し、クラスがアンロードされると破棄されます (これは非常にまれです)。次の場合に発生する可能性があります-

 -You force stop your app.
 -Application crashes.
 -You clear your app data.
 -Switch off your Device(Shutdown DVM).
于 2013-08-05T06:11:55.250 に答える