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