1

Androidアクティビティでは、そのアクティビティで静的として宣言されているArrayListを入力しています。このデータ構造は、後でアプリケーションの実行中に他のアクティビティによって次のようにアクセスされます。

ClassName.data_structure_name;

私の質問は、この方法で安全に実行できるかどうか、またはAndroidがメモリの構造などをクリアできるかどうかです。

4

4 に答える 4

1

はい、AndroidはここでActivity説明されているようにあなたを処分することができます。

アクティビティが一時停止または停止した場合、システムは、アクティビティを終了するように要求するか(finish()メソッドを呼び出す)、または単にプロセスを強制終了することによって、アクティビティをメモリから削除できます。アクティビティを再度開くとき(終了または強制終了後)、全体に作成する必要があります

しかし、これはActivity インスタンス用です。静的な場合は、クラスがDalvik VMからアンロードされArrayListない限りドロップされません(個人的にはこれが発生するのを見たことがありません)。Activity

とにかく、私見それは良いデザインではありません(私は過去にそれを使用しました)。静的を格納するために別のクラスを使用することをお勧めしますArrayList。マルチスレッドとを使用することの短所 に注意してください。Singletons

これこのSOの質問も読む価値があります。

于 2013-03-25T00:22:15.540 に答える
1

ArrayListにさまざまなアクティビティからアクセスする必要がある場合は、Activityクラスではなく、別のクラスに配置する必要があると思います。

于 2013-03-25T00:23:09.957 に答える
0

疑問に思っているのであれば、データはさまざまなプロセス間で保持されないため、おそらくエラーが発生するだけです。IE、クラスの静的メンバーは永続ストレージではありません。

ただし、これらの後のアクティビティが同じプロセス内にある場合は、指定したとおりにアクセスできます。

于 2013-03-25T00:16:02.910 に答える
0

この設計に関するいくつかの問題。

  1. ソフトウェアエンジニアリングとOOPのルールを破る
  2. また、MVCデザインパターンのルールを破っています
  3. あなたの活動が必要でないとき、それは記憶を占有します

あるソースからデータを取得し、それを配列リストに入れていると思います。配列リスト全体が必要ない場合は、バンドル内の値を渡すだけです。

後続のアクティビティで配列リスト全体が必要な場合は、最初に取得した方法で配列リストを再入力します。

静的アクセスは、OOP設計には適していません。ログタグを印刷するための次の場合を除いて、Androidアプリのどこでも静的を使用しません。

public static final String TAG="MY_TAG";

シングルトンでさえ非常に議論の余地があります。

于 2013-03-25T01:21:26.690 に答える