3. Introduzione
Strumenti:
Java Development Kit 1.5.0 (o superiore)
(http://www.oracle.com/technetwork/java/javase/
downloads/index.html)
Eclipse (http://www.eclipse.org/downloads/)
Android SDK
(http://developer.android.com/sdk/index.html)
Android Developer Tools Eclipse plugin
(https://dl-ssl.google.com/android/eclipse/)
Corso Android
4. Introduzione
Cos'竪 Android
Sistema operativo+middleware+applicazioni
insieme di strumenti e librerie per la realizzazione di
applicazioni mobili
Open (?)
Utilizza librerie e tecnologie open (Kernel Linux 2.6,
librerie Http Apache,...)
Open Handset Alliance (OHA)
Opensource Apache Licence 2.0
Corso Android
7. Introduzione
Linguaggi di programmazione
Java (SDK Java 5)
Native Development KIT C/C++
Non ha la JVM ma la DVM (Dalvik VM)
DVM ottimizzata per l'esecuzione di applicazioni su
dispositivi con risorse limitate (fle .dex)
Il fle .dex 竪 ottimizzato anche nella sua dimensione
Utilizza un meccanismo di generazione di codice detto
register based (java 竪 stack based), il quale comporta un
numero inferiore del 30% di istruzioni
Corso Android
8. Introduzione
JIT: si ha un'identifcazione e traduzione di parti di codice
da Java a C/C++ con miglioramento delle prestazioni di
esecuzione.
Ogni applicazione ha un User ID diferente
Ogni applicazione 竪 eseguita nel suo processo (simile a
Chrome)
Ogni applicazione ha una propria istanza di VM
Corso Android
10. Introduzione
Frammentazione
Le API di un particolare API Level sono disponibili in tutti I
dispositivi che supportano tale versione
Un device che accede al Market vedr solo le applicazioni
compatibili
Compatibilit Software e Hardware
Corso Android
11. Introduzione
Schermi
Screen size: Dimensione del display in pollici (Small,
Normal, Large, Exra large)
Aspect ratio: Rapporto tra larghezza e altezza
Resolution: numero di pixel del display in orizzontale e
verticale
Density: numero di pixel per unit di lunghezza fsica
(Low, Medium, High, Extra High)
Density Indipendent: dimensione non dipendente dalla
pixel (dip o dp) densit
Corso Android
15. Componenti e risorse
Activity
Intent e Intent Filter
Broadcast Intent Provider
Content Provider
Services
Corso Android
16. Componenti e risorse
Activity Intent [Filter]
UI applicazione
Chiamano le Activity
Package android.app
Package android.content
Lifecycle (onCreate(), )
Permettono di interagire
Eseguite all'interno di un con servizi del sistema
processo Linux
String uri=content://contacts/123
Intent intent = new Intent( Intent.
ACTION_GET_CONTENT,uri);
Intent Filter: dichiarazione
intent gestiti
Corso Android
17. Componenti e risorse
Broadcast Intent Service
Receiver
Package android.app
Gestione di eventi esterni Gps, rss...
Package android.content
Registrazione su handler di
eventi specifci
Corso Android
18. Componenti e risorse
Content Provider
Gestione dati (fle, SQLite)
Package android.content
Di default una applicazione
non pu嘆 accedere ad db si
un'altra
Corso Android
19. Componenti e risorse
Risorse
Res
compilate e accessibili
Assets tramite la classe R
Res
Drawable-hdpi
Assets
Drawable-ldpi non compilate e gestite
Drawable-mdpi attraverso la classe
Layout AssetManager (android.res)
Values
AndroidManifest.xml
Corso Android
20. Componenti e risorse
Tipo Cartella Costanti
String /res/values R.string.<chiave>
String array /res/values R.array.<chiave>
Integer array /res/values R.array.<chiave>
Color /res/values R.color.<chiave>
Color Drowable /res/values R.drawable.<chiave>
o /res/drawable
Stili e temi /res/values R.style.<chiave>
Dimensioni /res/values R.dimen.<chiave>
Corso Android
21. Componenti e risorse
Tipo Cartella Costanti
Animator animator R.animator
Anim anim R.anim
Color list /res/color
Menu menu R.menu
Assets assets Nessuna
Drawable /res/drawable R.drawable.<flename>
Xml generici /res/xml R.xml.<flename>
Raw /res/raw R.raw.<flename>
Corso Android
22. Componenti e risorse
Layout Risorse
Defniscono l'aspetto UI
String
Editor dedicato
String array
ID
Integer Array
@[package:][+]type/name
public Resources getResources()
-getString( R.string.name)
-getStringArray( R.array.name)
-getIntAray( R.array.name)
Corso Android
23. Componenti e risorse
Format e Plurali
Color
Like printf
ColorStateList
%[posizione]$[tipodato]
Dimension
[posizione]={1:n_runtime} [px, in,mm,pt,dp,sp]
Stili
[tipodato]={int:d,
string:s,foat:f,...}
Corso Android
24. Componenti e risorse
Drawable
BitmapDrawable
NinePatchDrawable
ClipDrawable
PictureDrawable
ColorDrawable
RotateDrawable
GradientDrawable
ScaleDrawable
InsetDrawable
ShapeDrawable
LayerDrawable
Corso Android
28. Activity
Activity
Le applicazioni android devono sfruttare al meglio le
risorse disponibili e dare una buona percezione d'uso
all'utente.
Devono rispondere immediatamente alle azioni di un
utente.
Corso Android
29. Activity
Stati
Active: Activity in cima allo stack, visibile e con il focus;
Paused: Activity non attiva ma visibile, non 竪 sensibile agli
eventi generati dagli utenti;
Stopped: Activity non attiva e non visibile;
Inactive: Activity eliminata o non ancora creata.
Corso Android
31. Activity
Ciclo di vita
onCreate(): Invocata nella creazione dell'Activity,
contiene le informazioni di inizializzazione;
onStart(): Visualizzazione Activity;
onResume(): l'Activity ha il focus ed 竪 in cima allo stack, 竪
nello stato di running;
onPause(): l'Activity non 竪 sensibile agli eventi generati
dagli utenti;
Corso Android
32. Activity
Ciclo di vita
onRestart(): simile alla onCreate(), si occupa di
ripristinare lo stato;
onStop(): l'Activity 竪 inattiva
onDestroy(): stato di inattivit, l'Activity pu嘆 essere
eliminata.
Corso Android
33. Activity
Processi
Foreground: sono quelli in esecuzione (in cima allo stack);
Visible: eseguono le attivit nello stato di Paused, non
interagiscono con l'utente;
Service: processi non associati ad un interfacia grafca;
Background: processi non visibili all'utente, sui quali 竪
stato invocato il metodo onStop();
Empty: processi non legati ad alcun componente
predefnito della piattaforma.
Corso Android
34. Intent
Intent: strumento per la collaborazione di due o pi湛
componenti
IntentFilter
IntentResolution
Corso Android
35. Intent
Intent espliciti
Intent intent =
new Intent(TestActivity.this,TestSecondActivity.class);
startActivity(intent);
Intent intent= new Intent();
ComponentName comp =
new ComponentName(TestActivity.this,
TestSecondActivity.class)
intent.setComponent(comp);
startActivity(intent);
Corso Android
36. Intent
Intent esplicite si usano quando si conosce a priori le
action da chiamare;
Android si basa sull'utilizzo di intent che permettono la
comunicazione tra applicazioni diverse in base alle info
defnite nell'AndroidManifest.xml
Late Runtime Binding (LRB)
Se l'intent non specifca il componentName di
destinazione allora 竪 necessario specifcare il tipo di
azione da eseguire: Intent setAction(String action)
Corso Android
38. Intent
Category
Defnita nell'IntentFilter
<category
android:name="android.intent.category.LAUNCHER" />
Extra
Insieme di info che si possono associare ad un Intent oltra
a quelle defnite con setData()
[ putExtras(), getExtras() ]
Ex Mail: Intent.EXTRA_MAIL e Intent.EXTRA:SUBJECT
Corso Android
40. View e Layout
View
View Group (pattern GoF Composite)
Adapter
Corso Android
41. View e Layout
View
I componenti visuali estendono: android.view.View
Gli aggregatori estendono: android.view.View
Ogni Activity ha una window
Ogni view chiama la setContentView();
R.java 竪 generato automaticamente
Corso Android
42. View e Layout
View
Permetono di visualizzare l'informazione e gestire
l'interazione con l'utente
Sono descritte tramite xml (infating)
Sono identifcate tramite in id
Dimensione: (Desiderata (measured),Efettiva)
Le view contengono informazioni sui padding, mentre I
layout sui margini
Corso Android
43. View e Layout
Widget Gestione dello Stato
(android.view.View)
Classe interna:
TextView TextView.SavedState
Button
CheckBox
RadioButton
ToggleButton
ImageView
AnalogClock
DigitalClock
...
Corso Android
45. View e Layout
Delegation Model (GoF Observer):
Un componente esegue un azione a seguito di un evento
tramite l'entit Adapter che defnisce le operazioni che la
sorgente dell'evento chiamer per la sua notifca.
ThreadUI (SingleThread Model)
Focus: a seconda che si usi un device con o senza tastiera
possono cambiare le modalit (textarea, button,...)
Corso Android
46. View e Layout
Linear Layout Relative Layout Table Layout
Grid Layout Tab Layout List View
Corso Android
47. View e Layout
View Group
LayoutParams
MarginLayoutParams
layout_height e layout_width
MATCH_PARENT: la view occupa tutto lo spazio disponibile
WRAP_CONTENT: la view occupa lo spazio necessario al
proprio contenuto
layout_marginBottom, layout_marginLeft,
layout_marginRight, layout_marginTop
Corso Android
48. View e Layout
Adapter
Componente che permette di disaccoppiare la sorgente dei
dati dal componente responsabile per la loro
visualizzazione, (android.widget)
DAO (data access object) interfaccia operazioni CRUD
ListAdapter: strumento per visualizzare informazioni sotto
forma di lista scrollabile
Corso Android
49. Toast
Visualizzazione di messaggi temporanei sullo schermo
public void showToast(View view) {
Toast toast = Toast.makeText(Context context, int
resourceId, int duration);
toast.show();
}
Context context = getApplicationContext();
Toast toast = Toast.makeText(context, "Hello toast!",
Toast.LENGTH_SHORT);
toast.show();
Corso Android
50. Menu
Sistema (File, Edit, View...)
Option menu (specifci dell'applicazione)
Menu contestuali
package android.view
public boolean onCreateOptionsMenu(Menu menu)
ret: indica se il menu deve essere visualizzato
invocato solo la prima volta che 竪 richiesto il menu
public boolean onPrepareOptionsMenu(Menu menu)
invocato prima che di ogni visualizzazione del menu,
necessario per modifcarlo dinamicamente
Corso Android
51. Menu
Ogni elemento di menu (item) 竪 defnito da:
Un identifcatore di item (itemId)
Un identifcatore di gruppo (groupId)
Una label (title)
Un ordine
Si pu嘆 identifcare ed accedere ad un gruppo di item
public abstract void setGroupVisible(int group,
boolean visible)
Corso Android
53. Menu
MenuItem
Intent
OnMenuClickListner
Callback
public boolean onOptionsItemSelected(MenuItem item) {
//...
return super.onOptionsItemSelected(item);
}
Corso Android
54. Menu
ContextMenu
legato alla View ma la sua gestione 竪 afdata all'Activity
public void registerForContextMenu(View view)
public void onCreateContextMenu(ContextMenu menu,
View v, ContextMenuInfo menuInfo)
Corso Android
55. Dialog
Alert
Progress
Date e time picker
public final void showDialog(int id)
protected Dialog onCreateDialog(int id)
private Dialog createCustomDialog() {
Dialog myDialog = new Dialog(this);
//...
return customDialog;}
Corso Android
57. Persistenza
Preferences
Framework per la gestione delle preferenze delle
applicazioni
public abstract SharedPreferences
getSharedPreferences(String name, int mode)
Default Mode: Context.MODE_PRIVATE
Corso Android
58. Persistenza
Gestione di fle
Java strandard: Stream
Lettura o scrittura su Filesystem o SD card
Lettura fle nel pacchetto apk
public abstract FileInputStream
openFileInput(String name)
public abstract FileInputStream
openOutputInput(String name)
Java NIO (New I/O) utilizza i bufer
Corso Android
59. Persistenza
Gestione di fle
String path = Environment.
getExternalStorageDirectory().
getAbsolutePath() + fleName.ext;
non: data/data/packageName/fles/fleName.ext;
<uses-permission android:name=
"android.permission.WRITE_EXTERNAL_STORAGE"/>
Corso Android
60. Persistenza
SQLite
DBMS compatto (500KB)
Veloce, semplice e portabile
android.database e android.database.sqlite
public static SQLiteDatabase openDataBase
(String path,
SQLiteDatabase.CursorFactory cursorFactory,
int flags);
String path =
/data/data/<packageName>/database/<nameDB.db>
int flags = CREATE_IF_NECESSARY | OPEN_READWRITE
Corso Android
62. Persistenza
Content Provider
Repository di informazioni accessibili da applicazioni
diverse attraverso modalit standard
URI: content://autority/path/id
prefsso che identifca il content provider
Content provider (www.contentprovider.com:8080)
/data/users
id dell'entit richiesta(opzionale)
Corso Android
63. Persistenza
Mime-Type
Composto da type/subtype (text/html, text/pdf...)
Gestito da IANA (Internet Assigned Numbers Authority)
Su android i Content Provider si identifcano con:
elenco risorse: vnd.android.cursor.dir/vnd.<name>
singola risorsa: vnd.android.cursor.item/vnd.<name>
Corso Android
65. Handler
UI Single Thread
Singolo thread in cui sono serializzate le callback di ui e
che regolano il ciclo di vita
Handler
MessageQueue (per ogni thread)
Message (implementa Parcelable)
defnite in android.os.
Corso Android
66. Handler
private Handler myHandler;
final TextView outputView = (TextView)
findViewById(R.id.outView);
myHandler = new Handler() {
public void handleMessage(Message msg) {
outputView.setText(msg.obj.toString());
}
};
Corso Android
69. Web
-HttpClient di Apache (org.apache.http.client)
public abstract HttpResponse execute (HttpUriRequest
request)
(command pattern)
HttpResponse ha tra le propriet:
Entity (streamed, self contained, wrapping)
Statusline (Codice risposta, versione protocollo,
descrizione del corrispondente messaggio)
Corso Android
72. Web
WebWiew
Uri uri = Uri.parse("http://www.google.com");
WebView webView = (WebView)
findViewById(R.id.webview);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
webView.clearCache(true);
webView.loadUrl(uri.toString());
<uses-permission
android:name="android.permission.INTERNET"/>
Corso Android