Autore Topic: Activity e BroadcastReceiver... Intent?  (Letto 584 volte)

Online Ricky`

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 2698
  • Respect: +370
    • Google+
    • rciovati
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    OS X Lion
Re:Activity e BroadcastReceiver... Intent?
« Risposta #15 il: 26 Settembre 2010, 17:07:25 CEST »
+1
Codice scritto al volo:

Interfaccia
Codice (Java): [Seleziona]
public interface MyEventListener {
        void myEventReceived();
}

receiver
Codice (Java): [Seleziona]
public class MyEventBroadcastReceiver extends BroadcastReceiver {

        private static ArrayList<MyEventListener>       mListeners      = new ArrayList<MyEventListener>();

        @Override
        public void onReceive ( Context arg0, Intent arg1 ) {

                if ( mListeners.size() != 0 ) {
                        for ( MyEventListener listener : mListeners ) {
                                listener.myEventReceived();
                        }
                }else{
                        //nessuna activity registrata
                }

        }

        public static void addMyEventListener ( MyEventListener listener ) {
                mListeners.add( listener );
        }

        public static void removeMyEventListener ( MyEventListener listener ) {
                mListeners.remove( listener );
        }

}

activity
Codice (Java): [Seleziona]
public class MyActivity extends Activity implements MyEventListener {
        /** Called when the activity is first created. */
        @Override
        public void onCreate ( Bundle savedInstanceState ) {
                super.onCreate( savedInstanceState );
                setContentView( R.layout.main );
        }

        @Override
        protected void onResume () {
                MyEventBroadcastReceiver.addMyEventListener( this );
                super.onResume();
        }

        @Override
        protected void onStop () {
                MyEventBroadcastReceiver.removeMyEventListener( this );
                super.onStop();
        }

        @Override
        public void myEventReceived () {
                // TODO Auto-generated method stub

        }
}

Offline lo

  • Utente junior
  • **
  • Post: 65
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    nexus one
Re:Activity e BroadcastReceiver... Intent?
« Risposta #16 il: 29 Settembre 2010, 20:18:59 CEST »
0
scusate il ritardo... :)
comunque perfetto, grazie mille!
solo una puntualizzazione...

mi domando se sia strettamente necessario che la variabile d'appoggio mListeners sia un ArrayList.
in realtà, correggetemi se sbaglio, se l'evento viene immediatamente processato da myEventReceived(), per passarlo potrebbe essere sufficiente una semplice variabile di tipo MyEventListener che potrebbe poi essere tranquillamente sovrascritta alla prossima ricezione.

tendiamo ad evitarlo perchè rischioso?
mi sfugge un qualche macro-particolare?

toglietemi poi una semplice curiosità: da dove nasce la convenzione di preporre ai nomi delle variabili la m minuscola?

grazie ancora :)

Offline MarcoDuff

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 941
  • Respect: +156
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    HTC Desire
  • Market Developer Name:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Activity e BroadcastReceiver... Intent?
« Risposta #17 il: 29 Settembre 2010, 22:21:13 CEST »
0
E' una lista semplicemente perché più oggetti di tipo MyEventListener possono registrarsi al listener. Il pattern usato è l'Observer, trovi maggiori informazioni qui: http://it.wikipedia.org/wiki/Observer_pattern

La convenzione (del tutto discutibile) di anteporre la "m" alle variabili (attenzione, non tutte le variabili, ma solo a quelle membro, ovvero quelle a livello di istanza), sta proprio a sottolineare che la variabile è di tipo Membro.
Le mie Applicazioni Android | Il mio Blog

Io faccio parte del Gruppo AndDev.it LOGTFO, tu no? Allora GTFO!
Quando un utente fornisce una risposta utile si può ringraziarlo premendo il tasto  alla destra del titolo del post. (Ricky` rulez)

Offline lo

  • Utente junior
  • **
  • Post: 65
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    nexus one
Re:Activity e BroadcastReceiver... Intent?
« Risposta #18 il: 29 Settembre 2010, 22:41:06 CEST »
0
Citazione
E' una lista semplicemente perché più oggetti di tipo MyEventListener possono registrarsi al listener.

ok, ma è consigliabile a priori per motivi di concorrenza oppure ci sono casi, come forse il mio, in cui può essere sufficiente una variabile "semplice"?

Offline MarcoDuff

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 941
  • Respect: +156
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    HTC Desire
  • Market Developer Name:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Activity e BroadcastReceiver... Intent?
« Risposta #19 il: 30 Settembre 2010, 00:18:45 CEST »
+1
La concorrenza qui non c'entra nulla!  ;-)

Ho l'oggetto "obj1" che ha necessita di essere informato quando arriva un intent al receiver.
Ho l'oggetto "obj2" che ha necessita di essere informato quando arriva un intent al receiver.

Allora (ovviamente le classi di obj1 e obj2 implementano l'interfaccia MyEventListener):
Codice (Java): [Seleziona]
MyEventBroadcastReceiver.addMyEventListener(obj1);
MyEventBroadcastReceiver.addMyEventListener(obj2);

in questo modo appena arriva un intent nel receiver, sia l'oggetto obj1 che l'obj2 saranno informati tramite il metodo di callback myEventReceived().

Ripeto, fa parte del pattern Observer.

Ovvio che se hai un solo oggetto che si deve mettere in ascolto... togli la lista ed hai finito, ma ci perdi in modularità!
Le mie Applicazioni Android | Il mio Blog

Io faccio parte del Gruppo AndDev.it LOGTFO, tu no? Allora GTFO!
Quando un utente fornisce una risposta utile si può ringraziarlo premendo il tasto  alla destra del titolo del post. (Ricky` rulez)

Online Ricky`

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 2698
  • Respect: +370
    • Google+
    • rciovati
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    OS X Lion
Re:Activity e BroadcastReceiver... Intent?
« Risposta #20 il: 30 Settembre 2010, 12:03:45 CEST »
0
Direi che MarcoDuff è stato esaustivo :)

Piccolo ot, se vuoi approfondire il discorso "convenzioni sulla nomenclatura delle variabili" dai un occhio qui:
Code Style Guidelines for Contributors | Android Open Source

Offline lo

  • Utente junior
  • **
  • Post: 65
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    nexus one
Re:Activity e BroadcastReceiver... Intent?
« Risposta #21 il: 30 Settembre 2010, 12:07:50 CEST »
0
Citazione
Direi che MarcoDuff è stato esaustivo

impeccabile!
grazie a tutti... ;-)