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



アプリ関連ニュース

お問い合わせはこちら

お問い合わせ・ご相談はお電話、またはお問い合わせフォームよりお受け付けいたしております。

tel. 06-6454-8833(平日 10:00~17:00)

お問い合わせフォーム