3

私はAndroid でMVPパターンを実装しています。EventBusを使用して、アクティビティ「A」からのプレゼンターに、アクティビティ「 B」で何かが発生して「A」からのビューを更新することを知らせています。

プレゼンターをコンストラクター内の EventBus に登録しましたが、登録を解除できる場所がありません。

public class PresenterA extends nucleus.presenter.Presenter<ViewA> {

    public PresenterA() {
        EventBus.getDefault().register(this);
    }

    public void onEvent(ChangesEvent e) {
        // change views
    }
}
  1. プレゼンターがアプリケーションと同じくらい存続すると想定される場合 (構成の変更時に再作成されない)、登録を解除する必要はありますか?
  2. ユーザーがアプリケーションを離れる (アクティビティ "A" を閉じる) と、参照は解放されますか、それともメモリ リークですか?
4

1 に答える 1

1
  1. 登録解除は重要であり、ユーザーがアプリケーションを離れても、リソースがすぐに消去されるわけではありません
  2. EventBus はプレゼンターへの静的参照を保持しているため、OS がプロセスを強制終了するまで解放されず、リークと見なされます。

イベント処理によってビューが変更されるため、登録と登録解除nucleus.presenter.Presenterが一般的です。onTakeView(ViewType view)onDropView()

于 2015-06-15T11:16:14.073 に答える