2012-01-05 39 views
1

ヘイ私はクイズのアプリケーションを作成しています.1つのアクティビティから別のアクティビティに最大100個の「質問」オブジェクトのArrayListを渡す必要があります。 Questionオブジェクトには6つのパラメータがあります。すべて小さな文字列です。私はこれを行う方法を探していましたが、それらのうちの1つは、それをあるクラスのパブリック静的変数として宣言し、別のクラスでそれを参照することでした。私は次のことについて疑問に思っていました:Androidの大規模な静的静的変数

  • 私はそれを使用する前に "インスタンス化"する必要がありますか、変数を宣言するだけですか?以下のように:私は、他の活動にいるとき

    ArrayList<Question> QuestionBank = new ArrayList<Question>(); 
    

    または

    ArrayList<Question> QuestionBank; 
    
  • 私は1つの活動でこの変数を宣言していた場合はどのように利用できる滞在でしょうか?それが宣言された活動は継続していますか?

  • これは非常にメモリを消費する方法ですか?より効率的ですが、比較的単純な方法がありますか?
  • 私はそれを使用し終わった後に変数nullを宣言すれば、以前使用されていたすべてのスペースを解放しますか?
+6

あなたの宣言のどちらも有効ではありません - あなたは名前を指定していません... –

+0

ああ、いいえ!申し訳ありません名前を指定するのを忘れました - 私は実際にカスタムArrayListsを書いているときにこの間違いをしています... – user1058210

答えて

4

回答:

  1. あなたがあれば "使用" する前に、それをインスタンス化する必要があります。 「使用」とは、そのメソッドを呼び出すことです。インスタンス化する場所、第1または第2のアクティビティは関係ありません。

  2. 静的フィールドは、オブジェクトインスタンス経由ではなくクラス経由でアクセスされるため、クラスフィールドとも呼ばれます。その結果、静的フィールドの場合は常にインスタンスが1つしかありません。 MyClass.someFieldはアプリ全体で利用でき、そのうちの1つしかありません。

  3. ファイル内のデータ(フラッシュストレージを使用)とは対照的に、メモリ(RAM)を使用します。しかし、ある時点でそれをメモリに保存する必要があるため、どのような場合でもこのメモリを使用します。

  4. はい、一時的に必要な場合は、不要になってメモリが解放されると(最終的にはgcが実行されたとき)、フィールドをnullに設定できます。

はところで、Applicationという名前のクラスの静的変数

  • 経由でIntent.setExtra()/Intent.getXXXExtra()
  • クラスを経由してアプリ:活動の間

    1. パスデータ内のデータを共有するためのいくつかのオプションがありますこれはアプリのライフサイクル全体で単一インスタンスで生存しています。
    2. Shared preferences
    3. Database
    4. Internal storage
  • +0

    このような完全な答えをありがとうPeter - まさに私が望んでいたものです! – user1058210

    0

    私はそれは間違いなく問題/副作用につながるソリューションです、あなたは別の活動から静的データを読みたいとは思いません。できるだけデカップリングされたアクティビティを保つ方が良いです。

    私はあなたのQuestionsクラスをParcableにすることが上記のように最良の解決策であると信じています。アクティビティIntent.setExtraメソッドでデータを設定します。あなたの他のアクティビティが始まると、Intentの質問を読んでから、アクティビティのライフサイクル内にすべてのデータがうまく収まり、あなたのアクティビティはこのように再利用されます。