2013-01-07 21 views
6

私はアンドロイドApplicationクラスを、アプリケーション内の他の(フラグメント)アクティビティによって共有される一時的な状態と共通コードを格納する場所として使用することを検討しています。 IDの、県のキー名などのようなandroidアプリケーションクラスを使用し、使用しない場合はいつですか?

  1. 共有定数
  2. グローバル変数(すなわちセッター/ゲッター)を反映:私はそれがために良い場所であるかどうかについてのより多くのフィードバックを取得したいと思い

    現在のUI状態、ナビゲーション、選択されたフラグメント、および一般に、永続化する必要のない一時的なデータを含む。

  3. 特定の条件が発生したときにデータを保持するためのフック。
  4. 環境設定が変更された後のUIの更新。
  5. getApplication()が利用できないコードなど、アプリ内のどこからでも簡単にコンテキストにアクセスできます。例えば、MyApp.getApp()のような静的ゲッターを介して。
  6. グローバルステート変数の可視性を必要とし、専用クラスに移動するには扱いにくい一般的なメソッドです。

これ以外に、アクティビティクラスにはどのようなものがありますか?それを維持するのは良い考えではないでしょうし、何が最良の選択肢になるのでしょうか?最後に、あなたのアプリでアプリケーションが最もよく使われていることが判明しましたか?私は一般的に読みやすくするためのより良いとして、このためのCと呼ばれる定数ファイルを作成

+1

投稿として「-1」を平坦化すると、他のユーザーにとっても有益な質問がたくさんあります。 :) – ninetwozero

答えて

2

IDのような共有の定数、県のキー名など

C.SHARED_PREFSはわかりやすいです。Application.SHARED_PREFS IMHO。 が持続する必要がないこと、現在のUIの状態を反映

グローバル変数(すなわち、セッタ/ゲッタ)、 ナビゲーション、選択された断片、および、一般的には、一時的なデータ。

これは、アクティビティやそれが関係するコンポーネント(たとえば、アクティビティのUI状態がおそらくicicleバンドルまたはアクティビティのインスタンス内に格納されている方がよい)に適しています。

特定の条件が発生したときにデータを保持するフック。

これは問題ありません。

設定が変更された後のUIの更新。

ここでも、これはそれぞれのコンポーネントでこれが良いと感じています。

例えばgetApplication()が利用できないコードを含む、アプリケーションのどこからでも をコンテキストにアクセスする簡単な方法を提供MyApp.getApp()などの静的ゲッターを 経由で取得します。

これは機能しますが、メモリリークには注意してください。アクティビティやサービスなどからメソッドを呼び出すときは、通常、コンテキストとしてパラメータを渡す必要があります。メモリリークの可能性が低くなります。

グローバル状態変数の可視性を必要とする一般的な方法 とその専用 クラスに離れて移動するにはあまりにも面倒になってしまいます。

私は、あなたのアプリが機能とサイズが大きくなると、これは維持するのが難しくなるので、専用クラスの努力をする方が良いと感じています。

+0

関連する「アクティビティ」は、実際には複数のFragmentActivityページを保持するViewPagerです。したがって、状態を保持してフラグメント間の通信を可能にする必要があります。イベントを使用すると、イホはこの状況では過度のことになります。 – ccpizza

2

おそらく、特定のフックを取り付けることができる場所です。

たとえば、ACRAクラッシュレポートライブラリを使用する場合、これはACRAが接続されているため、Applicationクラスを使用するだけです。これは私にこのクラスの使用を余儀なくされたことです。私は前にそれを必要としなかった。

関連する問題