私は今、メモリリークと戦っています。
好奇心から、View クラスまたは Adapter クラスのメンバーである mContext が null クリアされるのはいつですか?
そんなことをしている部分は見当たりませんでした…
編集:
GCについては知っていますが、たとえば、
ArrayAdapter には mContext があり、Activity に ArrayAdapter への参照がある場合、これは循環参照ですか?
私は今、メモリリークと戦っています。
好奇心から、View クラスまたは Adapter クラスのメンバーである mContext が null クリアされるのはいつですか?
そんなことをしている部分は見当たりませんでした…
編集:
GCについては知っていますが、たとえば、
ArrayAdapter には mContext があり、Activity に ArrayAdapter への参照がある場合、これは循環参照ですか?
null変数がいつ解放されるかを確認することは、制御できません。ただし、OOMEの問題は回避できます。
Dmitryが言ったように、を使用している場合は、使用後すぐにそのメソッドをBitmaps
呼び出します。recycle()
このようにして、保持しているリソースをクリアし、アプリケーションを実行するためのスペースを作ることができます。
GCを呼び出しても、GCがリソースを解放するかどうかわからないため、GCを呼び出しても意味がありません。
また、コードにメモリリークの問題がないかどうかを確認してください。これもOOMEにつながる可能性があるため。EclipseにMAT(プラグイン)を使用すると、メモリリークの問題を確認できます。
これで問題が解決しない場合でも、お問い合わせください。別の解決策を見つけようとします。
ありがとうございました :)
コンテキストは通常、Android によって管理される所有アクティビティです。アクティビティがアクティブになるまで、アクティブで有効であることが保証されます。何かトリッキーな、またはかなり低レベルのことをしているのでない限りmContext
、ビューやアダプターについて協調すべきではありません。
考慮すべきことはContext mContext
、アクティビティ (サービス、スレッド、アプリケーション クラスなど) よりも長く存続する可能性があるクラス (または同様のフィールドなど) へのアクティビティへの参照を格納することです。これにより、システムがアクティビティを適切に GC することが妨げられ、メモリ リークや微妙なバグが発生します。
ガベージコレクタが取得するまでクリアされません。言い換えると、変数への参照がない場合はすべてGCによって収集されるため、変数をクリアすることについて心配する必要はありません(すぐには収集されませんが、そうなります)。
しかし、Androidには問題を引き起こすクラスが1つあります- Bitmap
。アプリにメモリリークがある場合は、まず、ビットマップの使用状況を確認します。終了したら必ず電話してrecycle
ください。