2012-11-15 15 views
15

Che cosa è esattamente lo scopo della classe Application. Quali sono i vantaggi di estenderlo a una sottoclasse personalizzata Perché utilizzarlo? Le variabili globali possono essere memorizzate in qualsiasi altra classe raggiungono lo stesso obiettivo dell'applicazione?Qual è lo scopo della classe Applicaton in Android

Grazie,

risposta

5

Nizza domanda!

L'applicazione è un contesto sempre in esecuzione mentre le attività e i servizi sono in esecuzione.

È anche il primo contesto da creare e l'ultimo da distruggere. Quindi, circonda il ciclo di vita della tua app.

È possibile utilizzare la classe dell'applicazione come metodo per condividere dati o componenti (ad esempio per l'integrazione delle dipendenze). Per esempio, se si desidera condividere un Singleton tra le attività, è possibile creare l'istanza nella classe di applicazione e di fornire un getter, poi tutti gli altri contesti possono ottenere il Singleton tramite

((cast to your class)getApplicationContext()).getFoo(); 

Ci possono essere alcuni casi di utilizzo in cui si devi fare cose anche prima che venga lanciata la tua prima attività, quindi fallo nel metodo onCreate della classe dell'applicazione.

D'altra parte, non è mai necessario affidarsi al metodo onDestroy della classe Application, poiché non viene sempre chiamato. Non c'è un contratto per questo su Android.

Ma questo è raro e, di solito, non è necessario sovrascrivere la classe dell'applicazione. L'iniezione di dipendenza può essere ottenuta in altri modi da RoboGuice o Dagger, ad esempio.

3

Due cose rende questa classe molto utile:

  1. classe Application viene creata un'istanza prima di qualsiasi altra attività.
  2. Essa detiene il contesto dell'applicazione

Contesto porta una serie di risorse per noi: siamo in grado di capire alcune proprietà dei dispositivi, caricare alcune risorse, avviare un database SQLite, ecc, ecc

Tutto questo accade prima che carichi attività, e tutto questo è globalmente disponibile per le attività.

semplice esempio di quello che voglio dire:

public class App extends Application{ 
    private static Resources sResources; 

    //--I want to load strings resources from anywhere-- 
    public static String loadStringResource(int resID) { 
     return sResources.getString(resID); 
    } 


    @Override 
    public void onCreate() { 
     super.onCreate(); 

     sResources = getResources(); 

     //---I want to load all preferences when my app starts--- 
     PreferenceManager.setDefaultValues(this,R.xml.prefs,false); 

    } 
} 
+1

hai dimenticato classe Application è dove tutti i nativo C/C++ librerie create per NDK vengono caricati. –

0

estensione della classe Application consente di integrare nel ciclo di vita dell'applicazione.

Questo è utile anche per memorizzare informazioni globali a livello di applicazione (anche se di solito è bene tenere le vostre attività 'indipendenti')

0

La classe Application è a conoscenza del contesto dell'applicazione e viene caricata quando l'app viene caricata in modo da contenere i callback appropriati per il ciclo di vita dell'applicazione prima dell'avvio dell'attività. Molto probabilmente non vorresti estendere questa classe.

Dalla documentazione API:

v'è normalmente non c'è bisogno di creare una sottoclasse di applicazione. Nella maggior parte dei casi, i singleton statici possono fornire la stessa funzionalità in un modo più modulare. Se il singleton necessita di un contesto globale (ad esempio per registrare ricevitori broadcast), alla funzione di recuperarlo può essere assegnato un contesto che utilizza internamente Context.getApplicationContext() durante la prima creazione del singleton.

http://developer.android.com/reference/android/app/Application.html

Problemi correlati