ActivityのContext。よく使うと思います。
Intent経由で、他のActivityを起動するときなど、Intentに、Contextを指定するときは、大体以下のコードを書きます。
Intent(this, nextActivity.class)
これは、ActivityがContextのサブクラスであるためです。
でもって、モジュール的に、ActivityのサブクラスではないClassが、(Intent起動など)Contextを使う場合、
Activityから渡してやります。
でも、これが、どうやら、クセモノらしい。
そもそも、Contextとしてthisを指定するということは、Contextのライフサイクルが
Activityのライフサイクルと一致していないといけないわけです。
一致していない場合、なんらかのExceptionが発生する。
・・・のなら、いいのですが(デバッグしてればわかるから)、実は普通にメモリリークするらしい。
つまり、thisを指定して使われているContextが、Activity終了しても、他のモジュールから
参照されちゃってる場合、
「そのActivityが、ガベージコレクションされない」状態になっちゃうみたい。
��サンプルコード載せたいけど、試したコードがどっかいっちゃった・・・
なので、Activityのライフサイクル≠Context(を使用しているClass)のライフサイクルの場合、
Activity:getApplicationContext()を使ったほうがいいみたい。
こちらは、自分のつくっているアプリケーションが、Activityとは別に持っているContextを取得します。
(別じゃないパターンもあるみたいだけど、これは問題にならない)
アプリケーションが生きてる場合は、Contextを使用しても問題ない、ってことです。
実は、この問題は、こっそりここに書いてあります
↓
http://developer.android.com/reference/android/content/Context.html#getApplicationContext()
うーん、このメソッドを見る人は、ここで書いたこと、わかってると思うんですけどね、、、(w
0 件のコメント:
コメントを投稿