[解決済み] getApplication() vs. getApplicationContext()
質問
これに対する満足のいく答えが見つからなかったので、ここで紹介します。
Activity/Service.getApplication()
と
Context.getApplicationContext()
?
このアプリケーションでは、どちらも同じオブジェクトを返します。このアプリケーションでは
ActivityTestCase
しかし、アプリケーションをモック化することで
getApplication()
はモックで戻ってくるが
getApplicationContext
はまだ別のコンテキストインスタンス (Android によって注入されたもの) を返します。これはバグなのでしょうか?意図的なものでしょうか?
そもそも、その違いもよくわからない。テスト・スイートの外で、両方の呼び出しが異なるオブジェクトで戻ってくる場合があるのでしょうか?いつ、なぜ?さらに、なぜ
getApplication
に定義されている
Activity
と
Service
にはありませんが
Context
? からは常に有効なアプリケーションインスタンスが利用可能であるべきではないでしょうか?
どこでも
?
解決方法は?
非常に興味深い質問です。主に意味的なものだと思いますが、歴史的な理由によるものもあるかもしれません。
現在のAndroid ActivityとServiceの実装ではありますが。
getApplication()
と
getApplicationContext()
は同じオブジェクトを返しますが、常にそうであるという保証はありません (たとえば、特定のベンダーの実装の場合など)。
そのため、マニフェストに登録したApplicationクラスが欲しい場合、以下のようになります。
決して
コール
getApplicationContext()
というのも、アプリケーションのインスタンスではない可能性があるからです (これは明らかにテストフレームワークで経験したことです)。
なぜ
getApplicationContext()
はそもそも存在するのでしょうか?
getApplication()
はActivityクラスとServiceクラスでしか利用できないのに対して
getApplicationContext()
はContextクラスで宣言されています。
コンテキストではないものの、onReceive メソッドでコンテキストを与えられているブロードキャストレシーバでコードを書くとき、このメソッドで呼び出せるのは
getApplicationContext()
. これは、BroadcastReceiverで自分のアプリケーションにアクセスできることが保証されていないことも意味します。
Androidのコードを見ると、アタッチされたとき、アクティビティはベースコンテキストとアプリケーションを受け取り、それらは異なるパラメータであることがわかります。
getApplicationContext()
への呼び出しを委ねる。
baseContext.getApplicationContext()
.
もうひとつ、ドキュメントによると、ほとんどの場合、Applicationのサブクラスは必要ないそうです。
<ブロッククオート
をサブクラス化する必要はありません。
Application
. ほとんどの場合
静的シングルトンは、同じ機能をよりモジュール化して提供することができます。
の方法で行います。シングルトンにグローバルなコンテキストが必要な場合(たとえば
ブロードキャストレシーバー)を取得するための関数を
Context
を使用し、内部的には
Context.getApplicationContext()
というのは
を最初に構築します。
正確な答えになっていないことは承知していますが、それでも質問の答えになっていますか?
関連
-
Android.mk:7: *** セパレータがありません。
-
android.os の NetworkOnMainThreadException。
-
android exception - aapt.exe has stopped working.
-
Windowsのadbシェルでデータディレクトリにアクセスするとパーミッションが拒否される
-
Android TextViewにandroid:ellipsize=endのバグがある。
-
AndroidでListViewを使ってカスタムテーブルを描画する
-
android bluetooth--Bluetooth on、検索、ペアリング、接続
-
android.content.ActivityNotFoundException を解決します。Intent問題を処理するActivityが見つからない
-
[解決済み] getContext() , getApplicationContext() , getBaseContext() と "this" との相違点
-
[解決済み] getApplication()、getApplicationContext()、getBaseContext()、someClass.thisの違いと使い分け。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
AAPT2エラーについて:詳しくはログをご確認ください。
-
RuntimeException: アクティビティを開始できません ComponentInfo solution
-
を作ってください。*** makeするルールがない エラーの原因、分析、解決策
-
Android studioのインストールと問題発生、Emulator: PANIC: AVDのシステムパスが見つかりません。
-
Androidで、onTouchEventでダブルクリックを実装し、ダブルクリックイベントとして判定する方法
-
問題 ---- Android ---- ActivityManager: Error: アクティビティクラス{xx/xx.MainActivity}が存在しない
-
Android基本アプレット
-
アンドロイドの遅延実行のいくつかの方法
-
[解決済み] getContext() , getApplicationContext() , getBaseContext() と "this" との相違点
-
[解決済み] getApplication()、getApplicationContext()、getBaseContext()、someClass.thisの違いと使い分け。