2011-06-30 14 views
9

私が共有ロジック/データを定義することができるようするために利用可能なアプリケーションレベルのスコープが存在しないことを理解し、それぞれの活動がマニフェストで結ばスタンドアローンアプリケーションは本質的であることを...Android用アプリケーションレベルのスコープ変数

しかし、私はWebサービスコールを介して取得しているすべてのアクティビティでこの呼び出しをしたくないユーザーアクセス権のグループを持っていますonCreate()

私はアプリケーションでSharedPreferencesを使用していますが、権限はユーザーが編集できるようになっていないため、Androidデバイスのフラットファイルの公開はこれを処理するのが安全ではないように感じられます。

アプリケーションを再起動する場合は、この情報を再度リクエストする必要があります。そのため、変数を変数に格納するのが最もコストが安いと思います。

私はIntentExtrasを認識していますが、プリミティブ型ではなく、設定「オブジェクト」について説明しています。

この状況を正しく処理するにはどうすればよいですか?

+0

シングルトンを作成し、最初にこれらの変数をロードしてから静的ゲッターを取得します – Blundell

答えて

28

「アプリケーション」クラスを実際に作成して、基本的にアプリケーション全体の設定を作成することができます。

新しいクラスを作成してApplicationを拡張し、クラスメンバーと適切なgetter/setterメソッドを設定するだけで、アプリケーション全体にアクセスできます。

その後、次のようにマニフェストを更新する必要があります。

<application android:icon="@drawable/logo" 
      android:label="@string/app_name" 
      android:name=".application.CustomApplication"> 

次のように続いて任意の活動にあなたがそれにアクセスすることができます。

CustomApplication app = ((CustomApplication)getApplication()); 
+1

この情報は静的である必要がありますか?または 'getApplication()'は、ライフサイクル全体を通して存続するすでにインスタンス化されたオブジェクトを返しますか? – jondavidjohn

+1

いいえ、静的にする必要はありません、getApplicationはインスタンス化されたアプリケーションオブジェクトを取得します(アプリケーションクラスは常にアプリケーションの実行時にインスタンス化されます) – rhinds

+0

素晴らしい、これは完璧に動作するはずです。 – jondavidjohn

1

私は共有環境設定を使用すると、かなり安全だと思います。 root、カスタムROM、ハッキングの知識を持つ上級ユーザーのみがチャンスを得ることができます! (私はこれが可能であろうと確信していません)。

SharedPreferencesのほかに、カスタムアプリケーションオブジェクトを実装してそこにアクセス許可を保持することもできます。

とにかく、開発者としては、ユーザーのアクセス許可(httpsなど)とデコンパイルされたアプリケーションを取得するために、リクエスト内でどこかでハッキングされる可能性が高いと思います。

+0

デコンパイルされる心配はありません。共有プリファレンスは、暗号化されていないフラットファイルに入ります。誰かが情報を「取得」するのを心配しないで、実行中に編集することを心配しています(許可の調整など)。 – jondavidjohn

+0

いいえ、私はむしろ最高の共通点を念頭に置いて設計したいと思います。根付き、adbへのアクセス権を持っています。 – jondavidjohn

+0

次に、カスタムアプリケーションオブジェクトを使用してデータをメモリに保存し、 –