web-dev-qa-db-ja.com

どこからでもコンテキストを取得する方法は?

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

ありがとう

31
Caroline

最も簡単な(そして正しい)方法は次のとおりです。

新しいクラスを定義する

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();

それが役に立てば幸い

73
Addev

基本的に、2種類のコンテキスト-Activity ContextApplication Context

すべてに1つのコンテキストのみを使用する必要はありません。コンテキストが必要なすべての場合に1つのコンテキストを使用すると問題が発生します。このような何かに従うことをお勧めします-アクティビティ内のActivity ContextApplication Contextアクティビティの範囲を超えてコンテキストを渡す場合、これは メモリリーク を回避するのに役立ちます。

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

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

代わりに、Activity Contextはアクティビティに関連付けられており、アクティビティが破棄されると何度でも破棄できます-画面の向き、戻るボタンなどを変更します。

19
hovanessyan