2010-04-06 7 views

risposta

12

La classe android.app.Application è una funzione opzionale per estendere e archiviare lo stato globale dell'applicazione. Esistono altri modi per farlo, quindi la maggior parte delle app non personalizza questa classe.

Le attività, tuttavia, sono ciò che definisce ogni fase principale della vostra applicazione. Non sarebbe possibile creare un'applicazione senza attività. Avrai una classe di attività principale e questo sarà effettivamente definito con "estende l'attività".

+0

Non intendo essere pedante ma intendevi "Non sarebbe possibile creare un'applicazione senza attività" ?. Voglio solo essere completamente chiaro su questo. – jcrowson

+0

Le buone attività sono la componente fondamentale delle app. Mi piacciono le pagine di un'applicazione web. Ogni app ne avrà almeno una (anche se potresti essere in grado di avere un Widget senza uno suppongo). La tua app avrà bisogno di un'attività di ingresso. –

+0

Quindi è possibile avviare classi che estendono l'applicazione, in modo simile all'avvio delle attività utilizzando l'intento? – jcrowson

5

Modo migliore per vedere la differenza sarebbe vedere che è gerarchia di classe

Activity

java.lang.Object 
    ↳ android.content.Context 
     ↳ android.content.ContextWrapper 
      ↳ android.view.ContextThemeWrapper 
       ↳ android.app.Activity 

E Application

java.lang.Object 
↳ android.content.Context 
    ↳ android.content.ContextWrapper 
     ↳ android.app.Application 

applicazione è quello che vive fino al vostro processo di app per Android viene ucciso. È possibile utilizzarlo per memorizzare dati specifici dell'applicazione (purché l'applicazione sia attiva) che possono essere utilizzati in varie attività. Nota Non sto dicendo che dovresti ... Le preferenze condivise potrebbero essere un altro modo appropriato di andare secondo il tuo caso. Inoltre, per essere chiari, non puoi utilizzare la tua Applicazione per avviare la tua app a differenza dell'attività di avvio che inserisci nel file manifest.

È possibile utilizzare la propria classe di applicazione personalizzata come segue

<application 
    android:name="icom.osfg.test.app.AppController" 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/MyTheme" > 
    <!-- all the activities goes here --> 
</application> 

dove

AppController extends Application 
1

solo per aggiungere alle risposte precedenti.

La classe Application sarà un singleton che vivrà finché la tua app sarà viva.

È possibile inizializzare i componenti globali nella classe estesa Application poiché durerà fino alla fine del processo se non si desidera gestire il solito Activitylifecycle.

Ad esempio, inizializzazione di librerie di terze parti come: Parse, CanaryLeak, Crashlytics.

public class App extends Application { 

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

     Parse.initialize(this); 
     LeakCanary.install(this); 
     Fabric.with(this, new Crashlytics()); 
    } 
} 
Problemi correlati