Более эффективный способ обновления пользовательского интерфейса из сервиса, чем намерения?

В настоящее время у меня есть служба в Android, которая является образцом VOIP-клиента, поэтому он прослушивает SIP-сообщения и, если он получает его, запускает экран «Активность» с компонентами пользовательского интерфейса.

Затем следующие сообщения SIP определяют, что будет отображаться на экране. Например, при входящем звонке будет отображаться ответ или отклонение или при исходящем звонке будет отображаться экран набора номера.

В тот момент, когда я использую Intents, я хочу, чтобы Activity знала, в каком состоянии она должна отображаться.

Пример таков:

        Intent i = new Intent();
        i.setAction(SIPEngine.SIP_TRYING_INTENT);
        i.putExtra("com.net.INCOMING", true);
        sendBroadcast(i);

        Intent x = new Intent();
        x.setAction(CallManager.SIP_INCOMING_CALL_INTENT);
        sendBroadcast(x);
        Log.d("INTENT SENT", "INTENT SENT INCOMING CALL AFTER PROCESSINVITE");

Таким образом, для действия будет зарегистрирован приемник вещания для этих намерений, и он будет переключать свое состояние в соответствии с последним полученным намерением.

Пример кода следующим образом:

       SipCallListener = new BroadcastReceiver(){

            @Override
            public void onReceive(Context context, Intent intent) {
                    String action = intent.getAction(); 

                    if(SIPEngine.SIP_RINGING_INTENT.equals(action)){
                        Log.d("cda ", "Got RINGING action SIPENGINE");
                        ringingSetup();
                    }         

                    if(CallManager.SIP_INCOMING_CALL_INTENT.equals(action)){
                        Log.d("cda ", "Got PHONE RINGING action");
                        incomingCallSetup();
                    }  
            }
        };
        IntentFilter filter = new IntentFilter(CallManager.SIP_INCOMING_CALL_INTENT);
        filter.addAction(CallManager.SIP_RINGING_CALL_INTENT);
        registerReceiver(SipCallListener, filter);

Это работает, однако, кажется, что это не очень эффективно, Intents получит широкую систему вещания, а Intents, вынужденный запускать для разных состояний, кажется, что оно может стать неэффективным, чем больше я должен включить, так и добавив сложности.

Так что мне было интересно, есть ли другой, более эффективный и чистый способ сделать это?

Есть ли способ сохранить трансляцию Intents только внутри приложения?

Будут ли обратные вызовы лучше? Если да, то почему и каким образом они должны быть реализованы?

Ответы на вопрос(2)

Ваш ответ на вопрос