私はJavaとAndroidの初心者ですが、現在、私はAndroidで "メモリリーク"について混乱しています。例えば、01クラス、01アクティビティ、01インターフェイスは次のようになります:メモリリーク:Java Garbage CollectorとAndroid killメカニズムの混乱?
クラスBackGroundWorkerは、どのアプリケーションの命ある限り住ん:
public class BackGroundWorker {
private IOnEventOccurListener listener = null;
private static BackGroundWorker instance;
// ....
public void setListener(IOnEventOccurListener pListener) {
this.listener = pListener;
}
// ....
public static BackGroundWorker getInstance() {
//...
return instance;
}
}
リスナーインタフェース:
public interface IOnEventOccurListener {
public void onEventOccur();
}
とリスナー自体(アクティビティ):
public class ShowSomething extends Activity implements IOnEventOccurListener{
BackGroundWorker bgWorker;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
bgWorker = BackGroundWorker.getInstance();
bgWorker.setListener(this);
}
@Override
public void onEventOccur() {
// TODO do something
}
}
Romain Guyの言葉によると、here: リスナーへの参照があるため、メモリリークです(アクティビティ)。したがって、Java GCはアクティビティを使用していなくても収集できません。
は私が弱い参照によってその問題を解決することができました - しかし、まだ疑問に思う:必要に応じて、デバイスは、Android Devの文書に従って、より多くのメモリを必要とする。この場合、 は、それが活動を「殺す」になる - と仮定すると、アクティビティショー何かが "殺された" - 何が起こるのですか? (それはまだRomainガイによると漏れ、まだ "殺した")私は本当に混乱しています。誰もこれを説明してもらえますか?
はAndroidがメモリを解放しようとする画面上にない活動を破壊する
息子
は、どのように(私はより深く主題を理解したいさえを通じて、あなたの速い答えをありがとうアンドロイドは活動を "殺す"/"破壊する" - いつではないのですか)もっと詳しく読むためのヒントやリンクを教えてください。 – hungson175
@Flow:助言に感謝しますが、私はまだ詳細な説明が必要です – hungson175
@Commonware:私にはこのヒントや方向性を教えてください。 Btw、私はAndroidアプリをプログラミングして以来、あなたの記事から多くの有益な情報を見つけました。ありがとうございます:) – hungson175