これは簡単な質問かもしれませんが、自分が正しいことを確認したかっただけです。
私のAndroidアプリケーションには、以下を使用するコンストラクターがあります。
activity.getApplicationContext()
アクティビティは、パラメーターとしてコンストラクターに渡されます。
問題は、このクラスをサービスから呼び出していることです。サービスをパラメーターとして受け入れ、service.getApplicationContext
を使用する2番目のコンストラクターを作成した場合同じアプリケーションコンテキストを取得できますか?
同じアプリケーションコンテキストを取得しますか?
はい。あなたはAndroidドキュメントをチェックすることができます、彼らは提供しています
_ getApplicationContext()
_
現在のプロセスの単一のグローバルアプリケーションオブジェクトのコンテキストを返します。
したがって、アプリケーションプロセス全体で変更しないでください。
これにも注意してください。
getApplicationContext()
は通常、ライフサイクルが現在のコンテキストとは異なるコンテキストが必要な場合にのみ使用する必要があります。現在のコンポーネント
私が間違っている場合は修正してください。
ありがとう
アプリケーションコンテキストを取得する最も簡単な方法は次のとおりです。
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
は、プロセスが実行されているかどうか、アクティビティ、サービス、またはその他のものであるかどうかに関係なく、常に最初に初期化されます。常にアプリケーションコンテキストにアクセスできます。
アプリケーションコンテキストは1つしかないため、同じコンテキストを取得する必要があります。 Context
を受け取るコンストラクタは1つだけ持つことができますが、実際には2つは必要ありません。または、たとえば、アクティビティコンテキストではなく、アプリケーションコンテキストを取得したい場合は、Application
であるパラメーターとしてContext
をコンストラクターに設定させることができます。
アプリケーション全体のコンテキストを取得したい場合は、getApplicationContext()
を使用できます。現在のクラスのコンテキストを取得する場合は、代わりにgetBaseContext()
を使用できます。
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)を使用して正常にコンパイルします。