Maneira mais eficiente de atualizar a interface do usuário do Serviço do que as intenções?

Atualmente, tenho um Serviço no Android que é um exemplo de cliente VOIP, para que ele ouça mensagens SIP e, se receber uma, inicia uma tela de Atividade com componentes de interface do usuário.

Em seguida, as seguintes mensagens SIP determinam qual é a atividade a ser exibida na tela. Por exemplo, se for uma chamada recebida, ele exibirá Atender ou Rejeitar ou uma chamada efetuada exibirá uma tela de discagem.

No momento, uso Intents para informar à Atividade qual estado ela deve exibir.

Um exemplo é o seguinte:

        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");

Portanto, a atividade terá um receptor de transmissão registrado para essas intenções e alternará seu estado de acordo com a última intenção que recebeu.

Código de exemplo da seguinte maneira:

       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);

Isso funciona, no entanto, parece que não é muito eficiente, os Intents terão amplo sistema de transmissão e os Intents que precisam disparar para diferentes estados parecem que pode se tornar ineficiente quanto mais eu precisar incluir, além de adicionar complexidade.

Então, eu queria saber se existe uma maneira diferente, mais eficiente e limpa de fazer isso?

Existe uma maneira de manter o Intents transmitindo apenas dentro de um aplicativo?

Os retornos de chamada seriam uma ideia melhor? Em caso afirmativo, por que e de que maneira eles devem ser implementados?

questionAnswers(2)

yourAnswerToTheQuestion