web-dev-qa-db-ja.com

アプリケーションコンテキストの取得

これは簡単な質問かもしれませんが、自分が正しいことを確認したかっただけです。

私のAndroidアプリケーションには、以下を使用するコンストラクターがあります。

activity.getApplicationContext()

アクティビティは、パラメーターとしてコンストラクターに渡されます。

問題は、このクラスをサービスから呼び出していることです。サービスをパラメーターとして受け入れ、service.getApplicationContextを使用する2番目のコンストラクターを作成した場合同じアプリケーションコンテキストを取得できますか?

24
gtdevel

同じアプリケーションコンテキストを取得しますか?

はい。あなたはAndroidドキュメントをチェックすることができます、彼らは提供しています

_ getApplicationContext()
_

現在のプロセスの単一のグローバルアプリケーションオブジェクトのコンテキストを返します。

したがって、アプリケーションプロセス全体で変更しないでください。

これにも注意してください。

getApplicationContext()は通常、ライフサイクルが現在のコンテキストとは異なるコンテキストが必要な場合にのみ使用する必要があります。現在のコンポーネント

私が間違っている場合は修正してください。

ありがとう

8
bHaRaTh

アプリケーションコンテキストを取得する最も簡単な方法は次のとおりです。

Android.app.Applicationを拡張するクラスAppを作成します

public class App extends Application {
    public static Context context;

    @Override public void onCreate() {
        super.onCreate();
        context = getApplicationContext();
    }
}

属性AndroidManifest.xmlを持つように<application>Android:name="your.package.name.App"タグを変更します。

アプリケーションコンテキストが必要な場合は、App.contextから取得してください。

Applicationは、プロセスが実行されているかどうか、アクティビティ、サービス、またはその他のものであるかどうかに関係なく、常に最初に初期化されます。常にアプリケーションコンテキストにアクセスできます。

56

アプリケーションコンテキストは1つしかないため、同じコンテキストを取得する必要があります。 Contextを受け取るコンストラクタは1つだけ持つことができますが、実際には2つは必要ありません。または、たとえば、アクティビティコンテキストではなく、アプリケーションコンテキストを取得したい場合は、ApplicationであるパラメーターとしてContextをコンストラクターに設定させることができます。

2
Nikolay Elenkov

アプリケーション全体のコンテキストを取得したい場合は、getApplicationContext()を使用できます。現在のクラスのコンテキストを取得する場合は、代わりにgetBaseContext()を使用できます。

1
Android Killer

Yukuの答えを、静的ではない直接的なコンテキスト参照に適合させました。

extends_domain.company.pseudo.ApplicationName_であるクラス_Android.app.Application_を作成します。

_package hypersoft.systems.Android;

import Android.app.Application;

public class Starbox extends Application {

  public static Starbox instance;

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

}
_

このサンプルでは、​​完全なアプリケーションパッケージ名は_hypersoft.systems.Android.starbox_です。

次に、AndroidManifest.xmlの_<application>_タグをattribute_Android:name="hypersoft.systems.Android.Starbox"_に変更し、_Starbox.Java_を確認しますクラスファイルはプロジェクトコンポーネントディレクトリにあります:Androidではなくstarbox

これがすべて完了したら、_import hypersoft.systems.Android.Starbox_ができ、コードでStarbox.instance.getApplicationContext()を呼び出すことでApplicationContextを取得できます

最小SDKバージョン14(4.0)でビルドツール26およびAPI 26(Android 8.0)を使用して正常にコンパイルします。

1