AndroidのContext
Androidを開発する上でContextを利用することは多々あります
ダイアログの表示、プリファレンス、トーストの表示などです
また、ユーティリティクラスでは、そのほとんどでContextの入れ子ができるでしょう
私は、Activity、Service、Broadcastで取得したContext、Applicationで取得したContextくらいしか使ったことはありませんが、どのような違いがあるのかを確認していきます
Activity、Service、Broadcast上のContext
ActivityとServiceについては、「this」でContextを取得することができます
Broadcastは、onReceiveの引数にContextがあるので、それを使います
これらのContextは、取得してきたコンポーネントの寿命と同じになります
コンポーネントは終了しているが、コールバックで戻ってきたところに、Contextを使っている場合には、メモリリークでエラーとなりアプリが異常終了します
ダイアログの表示タイミングによっても、メモリリークが発生します
Applicaiton上のContext
Application上のContextとは、getApplicationContext()で取得できるContextです
他にも、Applicationを継承しているクラスで「this」を使うこと、上記Activity等のContextからgetApplicationContext()で取得することができます
このContextの寿命は、アプリのタスクが切れるまでとなります
こちらの方が、一般的に寿命は長いと思います
終わりに
Contextは多くの箇所で使いますので、場所にあったContextを使うことが一番かと思います
Activity内で完結しており、Activityが終了以降はContextを使用していないなら、ActivityのContextを使えばいいと思います
Activityが終了以降でもContextを使用している場合でも、その一部をApplicationのContextを使えば問題ないかと思います
また、ダイアログ等の表示にContextを使う場合には、各Contextのテーマ等も影響しますので、注意が必要です
火曜日担当:poppy
admin at 2017年07月11日 11:39:01