16/10/14 Ciclo di vita delle aEvità Android Mobile Programming – Prof. R. De Prisco Slide 69 Università di Salerno -‐ a.a. 2013-‐2014 • Ogni “AcHvity” ha dei metodi standard A(vità non esiste 1. onCreate() 2. onStart() 3. onResume() A(vità in esecuzione 4. onPause() 5. onStop() 6. onDestroy() A(vità non esiste • EseguiH secondo un determinato schema Ciclo di vita delle aEvità Android Mobile Programming – Prof. R. De Prisco Slide 70 Università di Salerno -‐ a.a. 2013-‐2014 1 16/10/14 Ciclo di vita delle aEvità Android Mobile Programming – Prof. R. De Prisco Ciclo di vita delle aEvità Android Mobile Programming – Prof. R. De Prisco Slide 71 Università di Salerno -‐ a.a. 2013-‐2014 Slide 72 Università di Salerno -‐ a.a. 2013-‐2014 • Quando l’utente preme il pulsante “Home” – vengono chiamate • onPause() • onStop() • Quando si ritorna all’aEvità – vengono chiamate • onRestart() • onStart() • onResume() 2 16/10/14 Ciclo di vita delle aEvità Android Mobile Programming – Prof. R. De Prisco Slide 73 Università di Salerno -‐ a.a. 2013-‐2014 • Quando l’utente ruota il disposiHvo – l’aEvità viene prima eliminata: • onPause() • onStop() • onDestroy() – e poi ricreata: • onCreate() • onStart() • onResume() • onDestroy(): perdita dello stato!!!! onSaveInstanceState Android Mobile Programming – Prof. R. De Prisco Slide 74 Università di Salerno -‐ a.a. 2013-‐2014 • Si salva lo stato in onSaveInstanceState() @Override public void onSaveInstanceState(Bundle savedInstanceState) { // Salvare lo stato dell’app savedInstanceState.putStringArrayList("LISTA_STRINGHE", array_di_stringhe); savedInstanceState.putInt("CONTATORE", counter); // Always call the superclass so it can save the view hierarchy state super.onSaveInstanceState(savedInstanceState); } • Lo si recupera in onCreate() @Override protected void onCreate(Bundle savedInstanceState) { … if (savedInstanceState != null) { array_di_stringhe = savedInstanceState.getStringArrayList("LISTA_STRINGHE"); counter = savedInstanceState.getInt("CONTATORE"); } } 3 16/10/14 Slide Main acHvity 75 Università di Salerno -‐ a.a. 2013-‐2014 Android Mobile Programming – Prof. R. De Prisco <acHvity android:name=".MainAcHvity" android:label="@string/app_name"> <intent-‐filter> <acHon android:name="android.intent.acHon.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-‐filter> </acHvity> ActivityLifeCycle Ciclo di vita delle aEvità Android Mobile Programming – Prof. R. De Prisco Slide 76 Università di Salerno -‐ a.a. 2013-‐2014 • App Calcolatrice – Cosa succede se ruoHamo il disposiHvo? Correggere l’errore nell’app Calcolatrice 4 16/10/14 Backstack Android Mobile Programming – Prof. R. De Prisco Slide 77 Università di Salerno -‐ a.a. 2013-‐2014 • Un app normalmente è fana di più acHvity – ogni acHvity ha uno specifico compito • modularità • Es. un app per la posta elenronica – un’aEvità per la scrinura del messaggio – un’aEvità per spedire il messaggio – un’aEvità per vedere una lista dei messaggi – un’aEvità per vedere il contenuto di un messaggio – ecc. Backstack Android Mobile Programming – Prof. R. De Prisco Slide 78 Università di Salerno -‐ a.a. 2013-‐2014 • Un’aEvità può lanciare un’altra aEvità – anche aEvità che appartengono ad altre app • Class “Intent” – serve a lanciare una nuova aEvità e “passare” i daH all’aEvità che si lancia – la vedremo fra poco • Task – è un insieme di aEvità con cui l’utente interagisce 5 16/10/14 Backstack Android Mobile Programming – Prof. R. De Prisco Slide 79 Università di Salerno -‐ a.a. 2013-‐2014 • Più aEvità possono coesistere, vengono organizzate in un backstack • Solitamente un task parte dall’Home screen – l’utente clicca un’icona e lancia un’aEvità – l’applicazione viene mostrata sulla schermo • gergo tecnico: viene portata in “foreground” • Se vengono lanciate nuove aEvità – l’aEvità corrente viene messa nel backstack – l’utente ci può tornare con il pulsante Back Backstack Android Mobile Programming – Prof. R. De Prisco Slide 80 Università di Salerno -‐ a.a. 2013-‐2014 • ConHnuando a premere Back si ritorna all’Home screen 6 16/10/14 Foreground e background Android Mobile Programming – Prof. R. De Prisco Slide 81 Università di Salerno -‐ a.a. 2013-‐2014 • Un task con le sue aEvità può essere spostato in “background” – quando l’utente inizia un nuovo task oppure preme il pulsante Home – Le aEvità vengono messe in stato di stop, ma il loro backstack rimane intano Istanze mulHple Android Mobile Programming – Prof. R. De Prisco Slide 82 Università di Salerno -‐ a.a. 2013-‐2014 • Se un’aEvità può essere lanciata da più di un’altra aEvità si possono avere istanze mulHple hnp://developer.android.com/guide/components/tasks-‐and-‐back-‐stack.html 7 16/10/14 Slide VisualizzaMappa 83 Università di Salerno -‐ a.a. 2013-‐2014 Android Mobile Programming – Prof. R. De Prisco • Un’app che usa aEvità di altre app – permene di inserire un indirizzo • L’indirizzo può essere preso dalla rubrica – sfruna un’aEvità della rubrica – permesso per leggere la rubrica!!! • Visualizza la mappa – sfruna un’aEvità dell’app GoogleMaps Classe Intent Android Mobile Programming – Prof. R. De Prisco VisualizzaMappa Slide 84 Università di Salerno -‐ a.a. 2013-‐2014 • Intent – è una descrizione (astrana) di un’operazione da svolgere • Permene di – startAcHvity: lanciare una nuova aEvità – broadcastIntent: spedire l’intent in broadcast • verrà ricevuto dai BroadcastReceiver interessaH – startService o bindService: comunicare con un servizio di background 8 16/10/14 Intent Android Mobile Programming – Prof. R. De Prisco Slide 85 Università di Salerno -‐ a.a. 2013-‐2014 • ParH principale di un oggeno Intent – AcHon: l’azione da svolgere • es. ACTION_VIEW, ACTION_EDIT, ACTION_MAIN – Data: i daH su cui operare espresse come URI • Uniform Resuorse IdenHfier: <schema>:<parte specifica> – “hnp://www.di.unisa.it/” – “mailto:robdep@unisa.it” – “geo:0,0?via+Posidonia+Salerno+Italy” – “tel:+391112223456” – “content://com.android.contacts/contacts” • Esempi di coppie (azione,daH): – ACTION_VIEW, content://contacts/people/1 – ACTION_DIAL, content://contacts/people/1 – ACTION_DIAL, tel:1112233 Intent Android Mobile Programming – Prof. R. De Prisco Slide 86 Università di Salerno -‐ a.a. 2013-‐2014 • Altri parH di un intent – Category • informazioni aggiunHve sull’azione da eseguire – es. CATEGORY_BROWSABLE significa che si può usare un browser come Component – Type • specifica in modo esplicito il Hpo (MIME) dei daH. Normalmente il Hpo viene dedono automaHcamente – Component • Specifica in modo esplicito l’aEvità da eseguire (che altrimenH verrebbe dedona dalle altre informazioni) – Extras • un bundle di informazioni addizionali (daH specifici per l’aEvità). 9 16/10/14 Intent Android Mobile Programming – Prof. R. De Prisco Slide 87 Università di Salerno -‐ a.a. 2013-‐2014 • Risoluzione esplicita – specifichiamo in modo esplicito l’aEvità (Component) che vogliamo lanciare • Risoluzione implicita – Component non è specificata – Android sceglie un’aEvità appropriata, in base a • • • • AcHon Type URI Category – Le aEvità dichiarano le acHon che possono soddisfare nel manifesto Intent Android Mobile Programming – Prof. R. De Prisco Slide 88 Università di Salerno -‐ a.a. 2013-‐2014 Intent i; i = newIntent(Intent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI); startAcHvityForResult(i, REQUEST_CODE); • Azione: ACTION_PICK – Chiede di selezionare un item • Data: – ContactsContract.Contacts.CONTENT_URI – “content://com.android.contacts/contacts” • startAcHvityForResult – lancia l’aEvità chiedendo un risultato – REQUEST_CODE serve ad indenHficare la richiesta 10 16/10/14 Intent Android Mobile Programming – Prof. R. De Prisco Slide 89 Università di Salerno -‐ a.a. 2013-‐2014 @Override protected void onAcHvityResult(int request, int result, Intent data) { if (request == REQUEST_CODE && result == AcHvity.RESULT_OK) { … • onAcHvityResult – viene chiamato quando si ritorna all’aEvità di partenza – permene di controllare il risultato resHtuito • controlliamo il REQUEST_CODE • in questo case anche un flag di OK • gesHamo i daH resHtuiH Intent Extras Android Mobile Programming – Prof. R. De Prisco Slide 90 Università di Salerno -‐ a.a. 2013-‐2014 • Informazioni “extra” – coppie chiave-‐valore • putExtra • getExtra intent.putExtra(“CONTATORE”,c); intent.putExtra(“STRINGA”,”Ciao”); intent.putExtras(bundle); c = intent.getExtra(“CONTATORE”); stringa = intent.getExtra(“STRINGA”); Bundle b = intent.getExtras(); 11 16/10/14 Intent Flags Android Mobile Programming – Prof. R. De Prisco Slide 91 Università di Salerno -‐ a.a. 2013-‐2014 • Informazione su come l’intent dovrebbe essere tranato – Esempi: • FLAG_ACTIVITY_NO_HISTORY – non memorizzare l’aEvità nello stack delle aEvità • FLAG_DEBUG_LOG_RESOLUTION – stampa informazioni addizionali quando si l’intent viene eseguito – molto uHle in fase di debug se l’intent che vogliamo far eseguire non viene eseguito Intent Component Android Mobile Programming – Prof. R. De Prisco Slide 92 Università di Salerno -‐ a.a. 2013-‐2014 • Permene di specificare l’aEvità “target” – da usare quando c’è una sola specifica aEvità (componente) che deve ricevere l’intent Intent intent = new Intent(Context context, Class<?> class); //oppure intent.setComponent(…); intent.setClass(…); intent.setClassName(…); 12 16/10/14 Slide Intent 93 Università di Salerno -‐ a.a. 2013-‐2014 Android Mobile Programming – Prof. R. De Prisco Quiz Quiz Android Mobile Programming – Prof. R. De Prisco Slide 94 Università di Salerno -‐ a.a. 2013-‐2014 • Cosa succede se ruoHamo lo schermo? – Un utente può barare sfrunando questo fano Correggere l’errore dovuto alle rotazioni nell’app Quiz • L’app Quiz conHnua a contare le risposte sbagliate Fare in modo che il click su una risposta venga contato una sola volta per ogni domanda 13
© Copyright 2024 Paperzz