1

オットーを使ってみます。これまでのところ機能していると思いますが、イベントを 2 回受け取ります。

これは私が持っているものです (私はGitHub の例に従いました):

プロデューサー:

public class NetworkChangeReceiver extends BroadcastReceiver
{
    @Override
    public void onReceive(final Context context, final Intent intent)
    {
        Log.i("ralphs", "onReceive");

        // .... more stuff

        final Bus bus = TRaumfeldApp.getInstance().getBus();
        bus.register(this);
        bus.post(new NetworkChangeEvent());
        bus.unregister(this);
    }

    @Produce
    public NetworkChangeEvent produceAnswer()
    {
        Log.i("ralphs", "produceAnswer");
        return new NetworkChangeEvent();
    }
}

サブスクライバー:

public class MainActivity extends ActionBarActivity
{
    private Bus              mBus;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // otto event bus
        mBus = TRaumfeldApp.getInstance().getBus();
    }

    @Override
    protected void onResume()
    {
        super.onResume();
        mBus.register(this);
    }

    @Override
    protected void onPause()
    {
        super.onPause();
        mBus.unregister(this);
    }

    @Subscribe
    public void answerAvailable(NetworkChangeEvent event)
    {
        Log.i("ralphs", "answerAvailable");
    }
}

ログは次のようにロックされます。

I/ralphs﹕ onReceive
I/ralphs﹕ produceAnswer
I/ralphs﹕ answerAvailable
I/ralphs﹕ answerAvailable

イベントを 2 回受信するのはなぜですか?

4

3 に答える 3

1

イベントを投稿する場合は、登録する必要はありません。

于 2014-12-23T18:35:39.810 に答える
0

私の知る限り、この問題は正しく動作する Otto Events Bus とは関係ありません。このバグは、Android API のブロードキャスト レシーバーと Network Change Event に関連しています。また、デバイス固有の問題でもあります。一部のデバイスは、2 つまたは 3 つのネットワーク変更イベントを受信する場合があります。ネットワーク接続の現在のステータスを示す静的変数を持つ NetworkState などと呼ばれるクラスを作成し、接続ステータスが変更された場合にのみイベントをバスにポストすることで、この問題を処理できます。この問題はNetworkEventsライブラリで処理されました。そのソース コードを参照して、そこでどのように処理されたかを確認したり、プロジェクトでこのライブラリを使用したりできます。特にNetworkConnectionChangeReceiverを見ることができますクラス。これは最善の解決策ではありませんが、ブロードキャスト レシーバーが期待どおりに動作しなくなるまで、他に何もできません。

于 2015-02-05T14:07:07.850 に答える