Weitere Effizienz beim Aktualisieren der Benutzeroberfläche über den Dienst als bei Absichten?

Ich habe derzeit einen Dienst in Android, der ein Beispiel für einen VOIP-Client ist, sodass er SIP-Nachrichten abhört. Wenn er eine empfängt, wird ein Aktivitätsbildschirm mit Benutzeroberflächenkomponenten gestartet.

Dann bestimmen die folgenden SIP-Nachrichten, welche Aktivität auf dem Bildschirm angezeigt werden soll. Wenn es sich beispielsweise um einen eingehenden Anruf handelt, wird "Annehmen" oder "Ablehnen" angezeigt, oder es wird ein abgehender Anruf angezeigt.

In der Minute, in der ich Intents verwende, weiß die Aktivität, welchen Status sie anzeigen soll.

Ein Beispiel ist wie folgt:

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

So hat die Aktivität einen für diese Zwecke registrierten Rundfunkempfänger und wechselt seinen Status entsprechend der zuletzt empfangenen Absicht.

Beispielcode wie folgt:

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

Dies funktioniert, aber es scheint nicht sehr effizient zu sein, die Absichten werden systemweit ausgestrahlt, und Absichten, die für verschiedene Zustände ausgelöst werden müssen, scheinen ineffizient zu werden, je mehr ich einbeziehen und Komplexität hinzufügen muss.

So habe ich mich gefragt, ob es einen anderen effizienteren und saubereren Weg gibt, dies zu tun?

Gibt es eine Möglichkeit, Absichten, die nur in einer Anwendung übertragen werden, beizubehalten?

Würden Rückrufe eine bessere Idee sein? Wenn ja, warum und auf welche Weise sollten sie umgesetzt werden?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage