入力パラメーターとして Context を必要とする他のクラスでメソッドを呼び出したいのですが、サービスで 3 つの可能性があります。
- getApplicationContext
- getBaseContext
- getApplication
どれをどれに使うScreenService
かextends Service
主な違いは何ですか。getApplicationContext を使用するのはよくないことを何度か読みました。本当?
入力パラメーターとして Context を必要とする他のクラスでメソッドを呼び出したいのですが、サービスで 3 つの可能性があります。
- getApplicationContext
- getBaseContext
- getApplication
どれをどれに使うScreenService
かextends Service
主な違いは何ですか。getApplicationContext を使用するのはよくないことを何度か読みました。本当?
アプリケーション コンテキストは、アプリケーションのライフサイクルに関連付けられており、アプリケーションの存続期間を通じて常に同じです。したがって、トーストを使用している場合は、アプリケーション コンテキストまたはアクティビティ コンテキスト (両方) を使用できます。これは、トーストはアプリケーション内のどこからでも発生させることができ、ウィンドウに関連付けられていないためです。
アクティビティ コンテキストはアクティビティのライフサイクルに関連付けられており、アクティビティの onDestroy が発生した場合に破棄できます。
getApplication()
Application オブジェクトを参照していますが、Application クラスは Context クラスを拡張しているため、アプリケーション コンテキストを提供するために使用できます。
getApplicationContext()
アプリケーション コンテキストを提供します。
getBaseContext()
アクティビティ コンテキストを提供します。
なぜ、どのような目的でコンテキストを使用しているかによって異なります。
getApplicationContext()
このコンテキストはアプリケーションがシャットダウンするまで存続するため、これが最も好ましい方法です。
getBaseContext()
コンテキストは、ウィジェットとビューで使用できます。
getApplicationContext()
したがって、トースト メッセージまたはインテントを作成する場合、使用が最も正しい場合でも、それらはすべて同じ効果を持ちます。Toast は、任意の種類の View が添付されていないため、任意の種類の Context を受け入れます。そのお知らせです。