2010-12-29 9 views
1

で静的変数を使用して: ...私はこのような静的リスト宣言私mainActivityでアンドロイド

public static List<Map<String, String>> ArrList = new ArrayList<Map<String, String>>(); 

は、その後、他の活動に、私はmainActivity.ArrListでこのリストにアクセスし、私は私が想定しておりませんことを、ほぼ確信していますしかし、とにかくそれを少しでもよく理解したいと思います...

私の質問はここにあります: 1)私の知っている限りでは、 mainActivityが破壊される可能性があります(別のアクティビティがフォーカスされています)。その場合、ArrListも破壊されます。そうですか? 2)終了すると再起動し、アプリがクラッシュし、デバッガがOutOfMemoryを報告します。私は再起動時に私の静的なリストのためのメモリの別のブロックを割り当てます。したがって、私は、アクティビティが終了したときに静的リストを破棄することも前提としています。どのようにそれを正しく行うには?

この問題に関するその他のアドバイスをいただきありがとうございます。

+0

質問:今日尋ねられる質問:http://stackoverflow.com/questions/4554879/android-save-application-context/4554923#4554923 – Aliostad

答えて

1
  1. 静的変数を使用することができます。静的変数は静的変数Activity/Contextオブジェクトを保持することを強く望ましくはありませんが、それに制限はありません。また、スタイリッシュなものを使用することを嫌う人もいます。

  2. アクティビティを破棄すると静的リストが破棄されます。つまり、静的リストは必要ありません。静的変数は、指定されたクラスのすべてのインスタンスで共通のものが必要な場合に便利です。グローバル変数を格納するための

  3. ベストな場所は、Applicationクラスを拡張することであるように、ゲッター/セッターを通してそこプライベートメンバーにアクセス宣言:あなたは、AndroidマニフェストでのMyAppを宣言する必要があると思います。この場合、

    public class MyApp extends Application 
    { 
        private List<Map<String, String>> ArrList; 
    //... 
    } 
    

    look here

0
  1. あなたの静的ArrayListあなたのプロセスは、空のリストが得られ(殺されたときにその値をクリアされ、B utはまだ有効で、nullではありません)。

  2. この静的配列は、アプリケーションを「終了」しても(プロセスが終了した後ではなく)その値を保持する可能性があるので、配列をクリアするようにしてくださいあなたが終了する前に、それは再び満たされません(二重+値を加える)。あなたはマルチタスクに優しいことを(殺されるから完全に回復することができる)あなたのアプリケーションをコーディングを開始するとき、このようなグローバル静的リストは頭痛の種になることができます使用してArrList.clear();

。このリストを使用するすべてのアクティビティは、それ自体を再開し、必要に応じてリストを再作成できる必要があります。

関連する問題