Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Mobile Computing, Unisa, Appunti di Programmazione Orientata agli Oggetti

Appunti di Mobile Computing, appunti presi durante il corso e riassunti

Tipologia: Appunti

2019/2020

Caricato il 30/01/2020

vik4rt
vik4rt 🇮🇹

1 documento

1 / 9

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
DOMANDE MOBILE
1) Differenza layout statico dinamico
Il layout specificato in maniera dinamica si può facilmente adattare ma, essendo eseguito
a runtime, risulta essere più lento dal punto di vista delle prestazioni, inoltre gli id per
ogni elemento sono generati a runtime.
Il layout statico disaccoppia la logica dalla grafica, specificando quest’ultima in un file xml
a parte, ed è semplice da specificare.
2) Creare layout programmaticamente
LINK: https://startandroid.ru/en/lessons/220-lesson-16-creating-layout-
programmatically-layoutparams.html
Nell’onCreate dell’activity:
-si crea il layout (Linear, Relative ecc.) passandogli al costruttore il context (this)
- si settano i parametri istanziando un LayoutParams passandogli nel costruttore
LayoutParams.MATCH_PARENT o WRAP_CONTENT
- si chiama setContentView(layout, parametri_layout)
-Per aggiungere widget al layout:
-Si istanziano passandogli il context nel costruttore
- si settano i parametri con setLayoutParams(oggetto_LayoutParams)
- si aggiunge il widget con oggettoLayout.addView(widget)
3) Lista Custom Click e Adapter
-Scrivere xml relativo all’item della list view
-scrivere xml contenente la listview
-creare classe custom che estende ArrayAdapter contenente:
-costruttore che prende in input context, id file di layout dell’item e ArrayList di
elementi
pf3
pf4
pf5
pf8
pf9

Anteprima parziale del testo

Scarica Mobile Computing, Unisa e più Appunti in PDF di Programmazione Orientata agli Oggetti solo su Docsity!

DOMANDE MOBILE

  1. Differenza layout statico – dinamico Il layout specificato in maniera dinamica si può facilmente adattare ma, essendo eseguito a runtime, risulta essere più lento dal punto di vista delle prestazioni, inoltre gli id per ogni elemento sono generati a runtime. Il layout statico disaccoppia la logica dalla grafica, specificando quest’ultima in un file xml a parte, ed è semplice da specificare.
  2. Creare layout programmaticamente LINK: https://startandroid.ru/en/lessons/220-lesson- 16 - creating-layout- programmatically-layoutparams.html Nell’onCreate dell’activity:
  • si crea il layout (Linear, Relative ecc.) passandogli al costruttore il context (this)
  • si settano i parametri istanziando un LayoutParams passandogli nel costruttore LayoutParams.MATCH_PARENT o WRAP_CONTENT
  • si chiama setContentView( layout , parametri_layout )
  • Per aggiungere widget al layout:
    • Si istanziano passandogli il context nel costruttore
    • si settano i parametri con setLayoutParams( oggetto_LayoutParams )
    • si aggiunge il widget con oggettoLayout.addView(widget)
  1. Lista Custom Click e Adapter
  • Scrivere xml relativo all’item della list view
  • scrivere xml contenente la listview
  • creare classe custom che estende ArrayAdapter contenente:
    • costruttore che prende in input context , id file di layout dell’item e ArrayList di elementi
  • getView contenente LayoutInflater inflater = LayoutInflater.from( context ). convertView(che è un parametro input di getView) = inflater.inflate( id , parent, false).
  • nell’activity fare findViewById della listView
  • Istanziare oggetto della classe CustomAdapter
  • Ottenere array di elementi da inserire nel listView
  • settare l’adapter sul listview
  1. Albero delle view Gerarchia che alla radice ha un layout che come figli può avere widget o altri layout (che a loro volta possono avere altri widget o layout). Nell’albero c’è un approccio top down. Il meccanismo di layout consta di 3 fasi: misura, posizionamento, disegno.
  • Misura, onMeasure(): il genitore dà dei vincoli al figlio, che calcola la sua estensione in altezza/larghezza e ricopre lo spazio che gli spetta in base a quello che gli è consentito dall’estensione del genitore. Ogni view chiede ai suoi figli quanto vorrebbero essere grandi ed ogni view può esprimere le sue preferenze con LayoutParams nel metodo onMeasure.
  • Layout, onLayout(): il genitore posiziona e prende le misure del figlio, in accordo alle misure effettuate in fase di misurazione.
  • Draw, onDraw(): il genitore dice al figlio di disegnare. Quando c’è un cambiamento bisogna chiamare invalidate() e poi verrà chiamato automaticamente onDraw sulla view.
  1. Ciclo di vita delle activity Un’activity ha un ciclo di vita che la fa passare da uno stato ad un altro, tale cambiamento avviene mediante la chiamata di specifici metodi. Al lancio dell’activity vengono richiamati:
  • onCreate(): l’activity viene creata. Il programmatore sovrascrive questo metodo per definire il layout dell’interfaccia e per definire le configurazioni di base.
  • fotocamera
  • contatti
  • telefono
  • sms
  • memoria
  • sensori
  • posizione
  • calendario
  • microfono Una volta approvato il permesso di un gruppo, vengono approvati tutti i permessi di quel gruppo (x es. approvando di leggere la memoria, si approva poi anche di scriverla) 7)Intent Classe per istanziare oggetti che consentono di lanciare una nuova activity passando dei dati. Si suddividono in intent espliciti ed impliciti. Con un intent esplicito si istanzia l’oggetto intent specificando la classe da cui lanciare l’intent e la classe dell’activity da lanciare, dopodiché si chiama startActivity(intent), quindi con un intent esplicito si provvede la specifica classe dell’activity da eseguire. Con un intent implicito non si specifica direttamente la componente android da chiamare, per questo si includono le informazioni necessarie ad effettuare l’operazione da svolgere. Tali informazioni consistono dell’azione da svolgere e dei dati su cui operare. I dati vengono trasmessi come Uri, mentre le azioni sono:
  • ACTION_VIEW: visualizza dati interni o esterni al dispositivo
  • ACTION_DIAL: telefona
  • ACTION_EDIT: modifica dei dati
  • ACTION_CALL: compone un numero telefonico Intent intenzione = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.video-corsi.com"));

Per lanciare la nuova activity usando un intent, si possono usare startActivity(intent) o in alternativa startActivityForResult(intent, REQUEST_CODE), dove il secondo parametro rappresenta un intero (arbitrario) per identificare la richiesta. Nella classe che richiama l’intent per poter ottenere tale risultato bisogna fare l’override del metodo onActivityResult(int request, int result, Intent data). All’interno si controlla se request == REQUEST_CODE e se result==RESULT_OK. Per tornare dalla seconda activity verso la prima (che ha lanciato il primo intent) si usa il metodo setResult(RESULT_OK,intent), passandogli un intent istanziato senza passare alcun parametro al costruttore. FIRSTACTIIVITY: Intent i = new Intent(this, SecondActivity.class); startActivityForResult(i, 1 ); @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 1 ) { if(resultCode == Activity.RESULT_OK){ String result=data.getStringExtra("result"); } if (resultCode == Activity.RESULT_CANCELED) { //Write your code if there's no result } } }//onActivityResult SECOND ACTIVITY: Se vuoi mandare dati Intent returnIntent = new Intent(); returnIntent.putExtra("result",result); setResult(Activity.RESULT_OK,returnIntent); finish(); Se non vuoi mandare dati : Intent returnIntent = new Intent(); setResult(Activity.RESULT_CANCELED, returnIntent); finish();

  1. AsyncTask
  • onActivityCreated(): segnala che la creazione dell’activity è stata completata e vi si può interagire
  • onStart(), onResume(), onPause(), onStop()
  • onDestroyView()
  • onDestroy()
  • onDetach() Un’activity viene inserita automaticamente da Android nel backstack, cosa che non accade con un fragment, per farlo è necessario il metodo addToBackStack(). Per aumentare il riutilizzo di un fragment, la comunicazione con altri fragment o con l’activity ospitante avviene mediante la definizione di un’interfaccia che viene poi implementata da chi deve comunicare col fragment. Il frammento può essere inserito staticamente nel layout con specificandone l’id e il percorso della classe del fragment, oppure dinamicamente a runtime mediante l’uso di FragmentManager e FragmentTransaction. Per lavorare coi fragment è necessario creare una classe che estenda Fragment e sovrascriva onCreateView. Per aggiungere il frammento ad un’activity: FragmentManager fm = getFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); MioFragment fragment = new MioFragment(); ft.add(R.id.fragment_container,fragment); ft.commit(); Un fragment può anche essere rimosso con ft.remove().
  1. Animazioni Per le animazioni si crea un file xml contenente le animazioni con i tag:
  • rotate: ruota (fromDegrese, toDegrese)
  • scale: ridimensiona (fromXScale, pivotX)
  • translate: sposta (fromXDelta)
  • alpha: rende trasparente/opaco (fromAlpha, toAlpha) E nella classe che vuole utilizzare l’animazione si istanzia un oggetto Animation e si attacca l’animazione al widget da animare. Nell’xml per non far accavallare le animazioni si usa l’attributo startOffset e si specifica nel tag radice sharedInterpolator=”false”.
  1. Shared Preferences Si usa per il salvataggio di dati privati dell’applicazione: è una classe che consente di salvare coppie chiave-valore. Si usa getSharedPreferences(“filename”). Per scrivere i dati su usa un oggetto Editor, si usa il metodo put***(chiave,valore) e si effettua il commit sull’editor.
  2. Componenti fondamentali di Android
  • Activity
  • Broadcasts: inviati quando si verifica un evento specifico mediante il metodo sendBroadcast(intent). Le app possono registrarsi a questi broadcast e quindi reagire al verificarsi dell’evento mediante il metodo registerReceiver(), un’altra componente crea l’evento e poi Android notifica il ricevitore chiamando onReceive(). La registrazione può essere statica nel manifest dell’app (e quindi il ricevitore viene registrato all’avvio del sistema), oppure dinamica (il registratore viene registrato quando si chiama). I broadcast costituiscono quindi un servizio di messaging di sistema fra le app.
  • Content Providers: progettati per condividere informazioni fra le applicazioni. Android include content providers che gestiscono audio, video, immagini ecc. Per accedere a un Content Provider si usa un ContentResolver. I dati contenuti nel provider sono memorizzati in tabelle.
  • Services: componente dell’applicazione che svolge operazioni lunghe in background e non provvede una user interface.x es. la componente di un’applicazione inizia un servizio e continua ad eseguirlo in background anche se l’utente passa ad un’altra applicazione (x es. riproduzione di musica in sottofondo). Si usa Context.startService(intent) che fa partire l’esecuzione del Service sul main thread.