0

Android 開発者ページによると、フラグメントはそのホスト アクティビティを通じて通信します。これは、厳格なフラグメント <-> ホスト関係と、最も単純なイベント伝播の冗長な実装を生成する傾向があります。複数の受信者がいる場合などはさらに悪化します。

私にとってうまくいった別のアプローチを提案したいと思います。アクターがシングルトンに登録しているため、特にメモリ リークに関して問題がある場合はお知らせください。

要約すると、フラグメントがイベントを投稿する EventHub シングルトンがあり、「反対側」で聞いている人がいるかどうかは気にしません。私のフラグメント (またはアクティビティ) は、その Handler インスタンスを渡す EventHub に登録されています。

他のフラグメントからのイベントをリッスンするアクティビティ/フラグメント:

public void onResume()
{
    super.onResume();

    // Register self with the hub and start receiving events
    EventHub.getInstance().register( handler_ );
    ...
}

/** Don't leak handlers. */
@Override
public void onPause() {
    // Remove self from the event hub.
    EventHub.getInstance().unregister( handler_ );
}

/** Dispatch events. */
private Handler handler_ = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        switch( msg.what ) {
            ....
        }
    }
};

フラグメント放出イベント:

    button.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v) {
                EventHub.getInstance().post( Message m );
            }
        });
4

1 に答える 1

2

独自の方法を開発する代わりに、Functional Reactive Programming を検討することをお勧めします。オブザーバブルとフレンドは、あなたが説明した問題のために正確に作成されました。また、ルールに従っている限り、メモリ リークについてあまり考える必要はありません。

初心者向けのチュートリアルは次のとおりです: http://mttkay.github.io/blog/2013/08/25/functional-reactive-programming-on-android-with-rxjava/ ://www.google.hu/search?q=android+rxjava

これは魔法の解決策ではなく、一見非常に複雑ですが、アイデアを理解すれば、ソフトウェアをよりシンプルに、より安全にするのに役立ちます。

それ以外の場合、提案されたソリューションに多くの問題は見られませんが、登録の一貫性を保つことは困難です。

于 2013-11-03T10:43:55.647 に答える