アクティビティのコンテキストをオブジェクトから派生したクラスに渡したアプリケーションを開発しています。
これを行うと何か問題がありますか?
アクティビティのコンテキストをオブジェクトから派生したクラスに渡したアプリケーションを開発しています。
これを行うと何か問題がありますか?
アクティビティやサービスのようなコンテキストのインスタンスを維持すると、メモリ リークが発生する可能性があります。
ただし、 によって返されるインスタンスへの参照を保持してもgetApplicationContext()
問題はありません。
本質的に間違っていることは何もありません。たとえば、すべてView
のクラスがそれを行います。
唯一の危険は、Activity
が破棄された後も への参照を維持することです。これは、メモリ リークの一般的な原因です。詳細については、ブログ投稿のメモリ リークの回避を参照してください。
View
ビュー自体への参照は通常、アクティビティが破棄されるとなくなるため、サブクラスはリークを回避します。参照を維持しているクラス インスタンスがそのように消えない場合は、参照がなくなるように手配する必要があります。1 つのオプションは、アクティビティをオーバーライドonDestroy
し、そこでクリーンアップを行うことです。もう 1 つはSoftReference
、コンテキストへのハード参照の代わりに a を使用することです。