CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: gianpassa con ben 1 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: carotix con ben 11 Thanks ricevuti negli ultimi sette giorni
Utente del mese: megthebest con ben 26 Thanks ricevuti nell'ultimo mese

Visualizzazione dei risultati da 1 a 1 su 1
Discussione:

[Tutorial] Il componente Application

Se questa discussione ti è stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #1
    Androidiano L'avatar di iClaude76


    Registrato dal
    Oct 2012
    Località
    Trento
    Messaggi
    207
    Smartphone
    Galaxy S3, Nexus 7, G. Tab 2 7

    Ringraziamenti
    1
    Ringraziato 27 volte in 25 Posts
    Predefinito

    [Tutorial] Il componente Application

    Nelle app Android il componente Application è poco conosciuto ed utilizzato, tuttavia può tornare utile in determinate situazioni.
    Application è il componente che sta sopra tutti gli altri, Activity, Service e BroadcastReceiver compresi.
    Ogni app Android ha un componente Application: se il programmatore non ne specifica uno, ne viene creato automaticamente uno di default.
    Per ottenere un reference a questo componente si usa il comando Context.getApplication().
    Siccome il componente Application è unico per ogni app Android, lo si può utilizzare per condividere variabili globali tra i vari componenti della nostra app (ad esempio tra le varie Activity).

    Vediamo quindi un esempio di come sfruttare il componente Application per condividere delle variabili globali tra i vari componenti della nostra app. Ogni volta che una variabile globale di Application viene modificata, tutti i componenti (ad es. le varie Activity) riceveranno una notifica.

     
    1
    2
    public class MiaApplication extends Application {
    3
        private ConcurrentHashMap<String, String> variabiliGlobali;
    4
        private Set<AppStateListener> mieiAppStateListeners;
    5
    6
        @Override
    7
        public void onCreate() {
    8
            super.onCreate();
    9
    10
            //chiamato prima della creazione di qualsiasi altro componente  
    11
            variabiliGlobali = new ConcurrentHashMap<String, String>();
    12
                    mieiAppStateListeners = Collections.synchronizedSet(newHasSet<AppStateListeners>());
    13
        }
    14
    15
        public String getVariabileGlobale(String chiave) {
    16
            return variabiliGlobali.get(chiave);
    17
        }
    18
    19
        public String rimuoviVariabileGlobale(String chiave) {
    20
            String valore = variabiliGlobali.remove(chiave);
    21
            notificaListeners(chiave, null);
    22
            return valore;
    23
        }
    24
    25
        public void inserisciVariabileGlobale(String chiave, String valore) {
    26
            variabiliGlobali.put(chiave, valore);
    27
            notificaListeners(chiave, valore);
    28
        }   
    29
            public void aggiungiAppStateListener(AppStateListener appStateListener) {
    30
            mieiAppStateListeners.add(appStateListener);
    31
        }
    32
    33
        public void rimuoviAppStateListener(AppStateListener appStateListener) {
    34
            mieiAppStateListeners.remove(appStateListener); 
    35
        }
    36
    37
        private void notificaListeners(String chiave, String valore) {  
    38
            for(AppStateListener appStateListener : mieiAppStateListeners) {
    39
                appStateListener.onStateChanged(chiave, valore);
    40
            }
    41
        }
    42
    43
        public interface AppStateListener { 
    44
            void onStateChanged(String chiave, String valore);
    45
        }
    46
    }
    47


    Come si vede, nella classe MiaApplication abbiamo anche definito un interfaccia, AppStateListener, che dovrà essere implementata da ogni componente della nostra App (Activity, ecc.) nel quale vogliamo utilizzare le variabili globali.
    Ora che abbiamo definito la nostra classe personalizzata MiaApplication, dobbiamo specificarla nel file Manifest della nostra app.

    8
     
    1
    2
    <application android:label="@string/app_name"
    3
       android:icon="@drawable/app_icon"
    4
       android:name=".MiaApplication">
    5
    6
    <!-- ecc. ecc. -->
    7
    </application>
    8


    Vediamo ora come utilizzare la nostra classe personalizzata MiaApplication in una ipotetica Activity:

    23
     
    1
    2
    public class MiaActivity extends Activity implements MiaApplication.AppStateListener {
    3
        
    4
        @Override
    5
        protected void onResume() {
    6
            super.onResume();
    7
            MiaApplication miaApplication = (MiaApplication) getApplication();
    8
            miaApplication.aggiungiAppStateListener(this);
    9
        }
    10
    11
        @Override
    12
        protected void onPause() {
    13
            super.onPause();
    14
            MiaApplication miaApplication = (MiaApplication) getApplication();
    15
            miaApplication.rimuoviAppStateListener(this);
    16
        }
    17
    18
        @Override
    19
        public void onStateChanged(String chiave, String valore) {
    20
            //gestire il cambiamento delle variabili globali
    21
        }
    22
    }
    23


    Naturalmente per aggiungere una variabile globale si userà un'istruzione del tipo:

    3
     
    1
    2
    miaApplication.inserisciVariabileGlobale(chiave, valore);
    3


    questo automaticamente chiamerà onStateChanged su tutti i componenti che implementano l'interfaccia MiaApplication.AppStateListener.

  2. I seguenti 2 Utenti hanno ringraziato iClaude76 per il post:

    Crotan (30-01-14),KlaasMad (31-01-14)

  3.  

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy