[解決済み】アクティビティコンテキストまたはアプリケーションコンテキストを呼び出すタイミングは?
質問
この2つの文脈が何であるかについては、多くの投稿があります。しかし、私はまだそれを正しく理解できていません。
私の理解では、今のところ
つまり、あるプログラマは、そのクラスのインスタンスとして
this.getApplicationContext()
をできるだけ頻繁に使用することで、メモリが漏れるのを防ぐことができます。これは、他の
this
(を取得する)。
Activity
インスタンスコンテキスト)を指す
Activity
ユーザが携帯電話を傾けたり、アプリを終了したりするたびに破棄されています。ガベージコレクタ(GC)はこれを捕捉しないため、メモリを過剰に消費しているようです。
しかし、誰か本当に良いコーディング例を思いついてください。
this
(のコンテキストを取得する)。
Activity
インスタンス)、アプリケーションのコンテキストは役に立たない/間違っていることになりますか?
解決方法は?
getApplicationContext()
はほとんど間違っています。
ハックボーンさん
(中略)非常に明確に、あなたは
だけ
使用
getApplicationContext()
を知っている場合
なぜ
を使用しています。
getApplicationContext()
を指定し、その時だけ
必要
を使用します。
getApplicationContext()
.
ぶっちゃけ、一部のプログラマは
getApplicationContext()
(または
getBaseContext()
Java の経験が乏しいためです。彼らは内部クラス (たとえば
OnClickListener
に対して
Button
で
Activity
) が必要であり
Context
. を使用するよりも、むしろ
MyActivity.this
を取得するために、外側のクラスの
this
を使用します。
getApplicationContext()
または
getBaseContext()
を取得します。
Context
オブジェクトを作成します。
あなたは
のみ
使用
getApplicationContext()
というときに
知っている
が必要です。
Context
他のどんなものよりも長生きする可能性があるものに対して
Context
を自由に使えるようにすることです。シナリオは以下の通りです。
-
使用方法
getApplicationContext()
に紐づくものが必要な場合はContext
それ自体がグローバルなスコープを持つことになります。私はgetApplicationContext()
で、例えばWakefulIntentService
の場合、静的なWakeLock
をサービスに使用します。そのためWakeLock
は静的でありContext
を取得するためにPowerManager
を使用して作成するのが最も安全です。getApplicationContext()
. -
使用方法
getApplicationContext()
にバインドする場合Service
からActivity
を渡したい場合はServiceConnection
(すなわち,バインディングのハンドル)の間のActivity
インスタンスでonRetainNonConfigurationInstance()
. Android は内部的にバインディングを追跡するために、これらのServiceConnections
への参照を保持しContexts
を作成し、バインディングを作成します。もし、バインディングをActivity
の場合、新しいActivity
への参照を持つことになります。ServiceConnection
への暗黙の参照を持ち、古いActivity
と、古いActivity
はガベージコレクションできない。
のカスタムサブクラスを使用する開発者もいます。
Application
は、独自のグローバルデータに使用され、そのデータは
getApplicationContext()
. 確かにそれは可能ですね。私は静的なデータ・メンバを好みます。
一つ
カスタム
Application
オブジェクトを作成します。私はあるアプリをカスタム
Application
オブジェクトを作成し、それが苦痛であることがわかりました。
ハックボーンさんもこの立場に賛同しています
.
以下はその理由です。
ではなく
を使用することです。
getApplicationContext()
を、どこへでも。
-
それは、完全な
Context
のすべてをサポートします。Activity
を行う。これを使ってやろうとする様々なことContext
は失敗します。 主にGUIに関連するもの . -
メモリリークを発生させることがあります。
Context
からgetApplicationContext()
は、あなたが呼び出したことによって作られた何かを保持しており、あなたがそれをクリーンアップすることはありません。しかしActivity
を使用すると、何かを保持している場合、一度Activity
がガベージコレクションされると、他のものもすべて洗い流されます。そのApplication
オブジェクトはプロセスの存続期間中ずっと残ります。
関連
-
[解決済み] setBackgroundDrawable() 非推奨
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] インスタンス状態の保存を使用してアクティビティ状態を保存するにはどうすればよいですか?
-
[解決済み] Androidの「コンテキスト」とは何ですか?
-
[解決済み] Androidのローテーションでアクティビティを再開する
-
[解決済み] Androidで'Context'を取得する静的な方法?
-
[解決済み] フラグメントでのコンテキストの使用
-
[解決済み] アプリケーションコンテキストはどこでも使える?
-
[解決済み] 匿名)内部クラスを使用することがリークセーフとなるのは、具体的にどのような場合ですか?
-
[解決済み】アクティビティコンテキストとアプリケーションコンテキストの違いについて
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] [Solved] Error "File google-services.json is missing from module root folder. これがないとGoogle Services Pluginは機能しません" [重複]。
-
[解決済み】このアクティビティは、すでにウィンドウ装飾によって提供されるアクションバーを持っています。
-
[解決済み】Android Studioでマニフェストのマージに失敗し、複数のエラーが発生した。
-
[解決済み】"ビットマップが大きすぎてテクスチャにアップロードできない"
-
[解決済み】リストビューにonclicklistenerを追加する(android)
-
[解決済み】'dependencies' を '(groovy.lang.Closure)' に適用できない。)
-
[解決済み] Android Studioで「URIが登録されていません」と報告されるのはなぜですか?[クローズド]
-
[解決済み] コンパイルした.apkを端末にインストールしようとするとINSTALL_FAILED_UPDATE_INCOMPATIBLEが表示される
-
[解決済み] Androidにおけるシングルトン vs. アプリケーションコンテキスト?
-
[解決済み】アクティビティコンテキストとアプリケーションコンテキストの違いについて