非常に興味深い質問です。これは主に意味的な意味であり、歴史的な理由によるものかもしれません。
現在のAndroidアクティビティとサービスの実装では、同じオブジェクトgetApplication()
をgetApplicationContext()
返しますが、これが常に当てはまるという保証はありません(たとえば、特定のベンダーの実装で)。
したがって、マニフェストに登録したApplicationクラスが必要な場合は、アプリケーションインスタンス(テストフレームワークで明らかに経験した)ではない可能性があるため、アプリケーションに呼び出してキャストしないでください。getApplicationContext()
getApplicationContext()
そもそもなぜ存在するのですか?
getApplication()
はActivityクラスとServiceクラスでのみ使用可能ですがgetApplicationContext()
、Contextクラスで宣言されています。
これは実際には1つのことを意味します。コンテキストではないがonReceiveメソッドでコンテキストが与えられているブロードキャストレシーバーでコードを記述する場合、呼び出すことしかできませんgetApplicationContext()
。これは、BroadcastReceiverでアプリケーションにアクセスできる保証がないことも意味します。
Androidコードを見ると、アタッチされると、アクティビティがベースコンテキストとアプリケーションを受け取り、それらは異なるパラメーターであることがわかります。getApplicationContext()
への呼び出しを委任しbaseContext.getApplicationContext()
ます。
もう1つ:ドキュメントには、ほとんどの場合、Applicationをサブクラス化する必要はないと記載されています。
通常、サブクラス化する必要はありませんApplication
。ほとんどの場合、静的シングルトンは、よりモジュール化された方法で同じ機能を提供できます。シングルトンにグローバルコンテキストが必要な場合(たとえば、ブロードキャストレシーバーを登録するため)、それを取得する関数に
、最初にシングルトンを作成するときContext
に内部的に使用する関数を指定できます。Context.getApplicationContext()
これが正確で正確な答えではないことは知っていますが、それでも、それはあなたの質問に答えますか?