2012-02-25 8 views
20

Androidでは、静的な方法のアプリケーションのコンテキストを取得する方法はありますか?たとえば、バックグラウンドスレッドから取得するなどです。どこからでもコンテキストを取得するには?

おかげ

+1

あなたを介してコンテキストの参照を渡す必要がそれを必要とするメソッドを呼び出した場合の引数*(ただし、参照を格納しない場合、メモリリークを引き起こす可能性があります)*。場合によってはApplication-Objectを使用することもできます。[この質問](http://stackoverflow.com/questions/987072/using-application-context-everywhere)を参照してください。しかし、答えを念頭に置いて限界を守ってください。 –

答えて

50

最も簡単な(そして正しい)方法がある:

public class MyApp extends Application { 
    private static MyApp instance; 

    public static MyApp getInstance() { 
     return instance; 
    } 

    public static Context getContext(){ 
     return instance; 
     // or return instance.getApplicationContext(); 
    } 

    @Override 
    public void onCreate() { 
     instance = this; 
     super.onCreate(); 
    } 
} 

は、その後、あなたのマニフェストにあなたがで「名前」フィールドに、このクラスを追加する必要があり、新しいクラスを定義します[アプリケーション]タブをクリックします。またはXMLを編集し、

<application 
    android:name="com.example.app.MyApp" 
    android:icon="@drawable/icon" 
    android:label="@string/app_name" 
    ....... 
    <activity 
     ...... 

を配置し、どこからでもあなたは

MyApp.getContext(); 

はそれが

+2

これは動作しますが、あなたがそれを悪用しないでシングルトンを使用するのと同じように注意してください。[この質問への答えを読む](http://stackoverflow.com/questions/7298731/when-to-call-activity-コンテキストContextまたはApplication Context/7298955#7298955)は、ApplicationContextが使用するコンテキストを(たまには)まれにしかしない理由を説明しています。 ベストウェイ: Contextを必要とするクラスの内部でContextを引数とするパブリックメソッドを公開していない場合(アクティビティなどから渡す)、これがその方法です。 Exp: public void abc(コンテキストc、int a); を呼び出し、それを任意のアクティビティから呼び出します。 –

12

基本的には、コンテキストの2種類持ってお役に立てば幸い呼び出すことができます - アクティビティーコンテキストApplication Contextを。

すべてに1つのコンテキストしか使用する必要はありません。コンテキストが必要なたびに1つのコンテキストを使用すると問題が発生します。 アクティビティの範囲を超えてコンテキストを渡すときは、アクティビティ内でアクティビティコンテキストを、アクティビティ内でコンテキストを渡すときにはアプリケーションコンテキストを使用してください。memory leaksを回避するのに役立ちます。

この記事を読むと、2つのコンテキストの違いがわかります。

アプリケーションコンテキストは限りアプリケーションが 生きていると活動のライフサイクルに依存しないとして生きるでしょう。コンテキストが必要な長寿命オブジェクトを保持する予定の を計画している場合は、 アプリケーションオブジェクトを覚えておいてください。

代わり アクティビティーコンテキストが活性に関連し、活性が破壊される回数だけ破壊される可能性が

- 一般にバック変更画面の向き、ボタン等

+2

これは良い答えです。 – ctn

関連する問題