Corso Android

3,531 views

Published on

Corso teorico pratico

Published in: Technology
1 Comment
5 Likes
Statistics
Notes
No Downloads
Views
Total views
3,531
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
156
Comments
1
Likes
5
Embeds 0
No embeds

No notes for slide

Corso Android

  1. 1. AndroidCorso teorico pratico Corso Android
  2. 2. WHOAMIAndrea Putzu[Software Engineer] Corso Android
  3. 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. 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
  5. 5. Introduzione Corso Android
  6. 6. Introduzione✔ 2007 nasce lOpen Handset Alliance✔ 2008 HTC G1 (limitazione tastiera fsica)✔ 10/2008 Android 1.0✔ 02/2009 Android 1.1✔ 05/2009 Cupcake (Android 1.5, tastiera virtuale, widget...)✔ 09/2009 Donut (Android 1.6 Quick search box, PICO sintetizzatore vocale...)✔ 10/2009 Eclair (Android 2.0)✔ 01/2010 Eclair (Android 2.1)✔ 05/2010 Froyo (Android 2.2 JIT)✔ 10/2010 Gingerbread (miglioramento prestazoni, SIP)✔ 01/2011 Honeycomb (Android 3.0 Tablet)✔ 10/2011 Ice Cream Sandwich (Tablet + Smartphone) Corso Android
  7. 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 lesecuzione 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. 8. Introduzione✔ JIT: si ha unidentifcazione 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
  9. 9. Introduzione Corso Android
  10. 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. 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
  12. 12. IntroduzioneQVGAHVGAWVGA Corso Android
  13. 13. Anatomia di unapplicazione✔ Nuovo progetto su Eclipse✔ AndroidManifest.xml✔ Debug✔ Log: -Verbose Log.v(string tag, string msg) -Debug Log.d(string tag, string msg) -Info Log.i(string tag, string msg) -Warning Log.w(string tag, string msg) -Error Log.e(string tag, string msg) -Assert Log.println(int priority, string tag, string msg)✔ Disabilitare I Log per applicazione in release it.android.andlib.utility.LogUtil Corso Android
  14. 14. Anatomia di unapplicazione✔ Android Debug Bridge (adb)✔ adb shell✔ adb install✔ adb uninstall✔ … Corso Android
  15. 15. Componenti e risorse✔ Activity✔ Intent e Intent Filter✔ Broadcast Intent Provider✔ Content Provider✔ Services Corso Android
  16. 16. Componenti e risorseActivity Intent [Filter]✔ UI applicazione ✔ Chiamano le Activity✔ Package android.app ✔ Package android.content✔ Lifecycle (onCreate(), …) ✔ Permettono di interagire✔ Eseguite allinterno di un con servizi del sistemaprocesso Linux String uri=“content://contacts/123” Intent intent = new Intent( Intent. ACTION_GET_CONTENT,uri); Intent Filter: dichiarazione intent gestiti Corso Android
  17. 17. Componenti e risorseBroadcast Intent ServiceReceiver ✔ Package android.app✔ Gestione di eventi esterni Gps, rss... ✔✔ Package android.content✔ Registrazione su handler dieventi specifci Corso Android
  18. 18. Componenti e risorseContent Provider✔ Gestione dati (fle, SQLite)✔ Package android.content✔ Di default una applicazionenon può accedere ad db siunaltra Corso Android
  19. 19. Componenti e risorseRisorse ✔ 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. 20. Componenti e risorseTipo Cartella CostantiString /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/drawableStili e temi /res/values R.style.<chiave>Dimensioni /res/values R.dimen.<chiave> Corso Android
  21. 21. Componenti e risorseTipo Cartella CostantiAnimator animator R.animatorAnim anim R.animColor list /res/colorMenu menu R.menuAssets assets NessunaDrawable /res/drawable R.drawable.<flename>Xml generici /res/xml R.xml.<flename>Raw /res/raw R.raw.<flename> Corso Android
  22. 22. Componenti e risorse Layout Risorse✔ Defniscono laspetto 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. 23. Componenti e risorseFormat 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. 24. Componenti e risorseDrawable✔ BitmapDrawable ✔ NinePatchDrawable✔ ClipDrawable ✔ PictureDrawable✔ ColorDrawable ✔ RotateDrawable✔ GradientDrawable ✔ ScaleDrawable✔ InsetDrawable ✔ ShapeDrawable✔ LayerDrawable Corso Android
  25. 25. Componenti e risorseNinePatchDrawable Corso Android
  26. 26. Componenti e risorseAssets✔ Non compaiono nella classe R✔ Necessita lutilizzo della classe AssetManager✔ Cartella /assets Corso Android
  27. 27. Activity e Intent Corso Android
  28. 28. ActivityActivity✔ Le applicazioni android devono sfruttare al meglio lerisorse disponibili e dare una buona percezione dusoallutente.✔ Devono rispondere immediatamente alle azioni di unutente. Corso Android
  29. 29. ActivityStati✔ Active: Activity in cima allo stack, visibile e con il focus;✔ Paused: Activity non attiva ma visibile, non è sensibile aglieventi generati dagli utenti;✔ Stopped: Activity non attiva e non visibile;✔ Inactive: Activity eliminata o non ancora creata. Corso Android
  30. 30. Activity Corso Android
  31. 31. ActivityCiclo di vita✔ onCreate(): Invocata nella creazione dellActivity,contiene le informazioni di inizializzazione;✔ onStart(): Visualizzazione Activity;✔ onResume(): lActivity ha il focus ed è in cima allo stack, ènello stato di running;onPause(): lActivity non è sensibile agli eventi generati✔dagli utenti; Corso Android
  32. 32. ActivityCiclo di vita✔ onRestart(): simile alla onCreate(), si occupa diripristinare lo stato;✔ onStop(): lActivity è inattiva✔ onDestroy(): stato di inattività, lActivity può essereeliminata. Corso Android
  33. 33. ActivityProcessi✔ Foreground: sono quelli in esecuzione (in cima allo stack);✔ Visible: eseguono le attività nello stato di Paused, noninteragiscono con lutente;✔ Service: processi non associati ad un interfacia grafca;✔ Background: processi non visibili allutente, sui quali èstato invocato il metodo onStop();✔ Empty: processi non legati ad alcun componentepredefnito della piattaforma. Corso Android
  34. 34. Intent✔ Intent: strumento per la collaborazione di due o piùcomponenti✔ IntentFilter✔ IntentResolution Corso Android
  35. 35. IntentIntent esplicitiIntent 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. 36. Intent✔ Intent esplicite si usano quando si conosce a priori leaction da chiamare;✔ Android si basa sullutilizzo di intent che permettono lacomunicazione tra applicazioni diverse in base alle infodefnite nellAndroidManifest.xml Late Runtime Binding (LRB)✔ Se lintent non specifca il componentName didestinazione allora è necessario specifcare il tipo diazione da eseguire: Intent setAction(String action) Corso Android
  37. 37. IntentFlags-ex FLAG_ACTIVITY_NEW_TASK(android:process=”new_process”)Intent e DatiSpecifca del tipo di dato:scheme://host:port/pathAuthority= Host + PortScheme: identifca il ContentProvider<data> permette di defnire URI e mime-type Corso Android
  38. 38. IntentCategoryDefnita nellIntentFilter<category android:name="android.intent.category.LAUNCHER" />ExtraInsieme di info che si possono associare ad un Intent oltraa quelle defnite con setData()[ putExtras(), getExtras() ]Ex Mail: Intent.EXTRA_MAIL e Intent.EXTRA:SUBJECT Corso Android
  39. 39. View e Layout Corso Android
  40. 40. View e Layout• View• View Group (pattern GoF Composite)• Adapter Corso Android
  41. 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. 42. View e Layout View• Permetono di visualizzare linformazione e gestirelinterazione con lutente• Sono descritte tramite xml (infating)• Sono identifcate tramite in id• Dimensione: (Desiderata (measured),Efettiva)• Le view contengono informazioni sui padding, mentre Ilayout sui margini Corso Android
  43. 43. View e LayoutWidget Gestione dello Stato(android.view.View) Classe interna:• TextView TextView.SavedState• Button• CheckBox• RadioButton• ToggleButton• ImageView• AnalogClock• DigitalClock• ... Corso Android
  44. 44. View e Layout Corso Android
  45. 45. View e Layout Delegation Model (GoF Observer):• Un componente esegue un azione a seguito di un eventotramite lentità Adapter che defnisce le operazioni che lasorgente dellevento 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. 46. View e LayoutLinear Layout Relative Layout Table Layout Grid Layout Tab Layout List View Corso Android
  47. 47. View e LayoutView GroupLayoutParamsMarginLayoutParamslayout_height e layout_widthMATCH_PARENT: la view occupa tutto lo spazio disponibileWRAP_CONTENT: la view occupa lo spazio necessario al proprio contenutolayout_marginBottom, layout_marginLeft,layout_marginRight, layout_marginTop Corso Android
  48. 48. View e LayoutAdapterComponente che permette di disaccoppiare la sorgente dei dati dal componente responsabile per la loro visualizzazione, (android.widget)DAO (data access object) interfaccia operazioni CRUDListAdapter: strumento per visualizzare informazioni sotto forma di lista scrollabile Corso Android
  49. 49. ToastVisualizzazione di messaggi temporanei sullo schermopublic 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. 50. Menu• Sistema (File, Edit, View...)• Option menu (specifci dellapplicazione)• Menu contestuali package android.viewpublic boolean onCreateOptionsMenu(Menu menu) ret: indica se il menu deve essere visualizzato invocato solo la prima volta che è richiesto il menupublic boolean onPrepareOptionsMenu(Menu menu) invocato prima che di ogni visualizzazione del menu, necessario per modifcarlo dinamicamente Corso Android
  51. 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 itempublic abstract void setGroupVisible(int group, boolean visible) Corso Android
  52. 52. Menu Corso Android
  53. 53. Menu MenuItem• Intent• OnMenuClickListner• Callbackpublic boolean onOptionsItemSelected(MenuItem item) { //... return super.onOptionsItemSelected(item);} Corso Android
  54. 54. MenuContextMenuÈ legato alla View ma la sua gestione è afdata allActivitypublic void registerForContextMenu(View view)public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) Corso Android
  55. 55. Dialog• Alert• Progress• Date e time pickerpublic final void showDialog(int id)protected Dialog onCreateDialog(int id)private Dialog createCustomDialog() { Dialog myDialog = new Dialog(this); //... return customDialog;} Corso Android
  56. 56. Persistenza Corso Android
  57. 57. Persistenza PreferencesFramework per la gestione delle “preferenze” delle•applicazionipublic abstract SharedPreferences getSharedPreferences(String name, int mode)Default Mode: Context.MODE_PRIVATE Corso Android
  58. 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. 59. PersistenzaGestione di fleString 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. 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
  61. 61. Persistenza SQLite• ExecSQL• delete• Insert• update• replace• query• cursor (Iterator design pattern) Corso Android
  62. 62. Persistenza Content ProviderRepository 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 dellentità richiesta(opzionale) Corso Android
  63. 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
  64. 64. Handler Corso Android
  65. 65. Handler UI Single ThreadSingolo 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. 66. Handlerprivate 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
  67. 67. HandlerThread workerThread = new Thread(new Runnable() {public void run() { try { Message messageToSend = myHandler.obtainMessage(); String message = ...; messageToSend.obj = message; myHandler.sendMessage(messageToSend); } catch (Exception e) { Log.e(LOG_TAG, e.getMessage()); } finally { dismissDialog(WAITING_PROGRESS_DIALOG_ID); }}}); Corso Android
  68. 68. WEB Corso Android
  69. 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
  70. 70. Web• Get,Put (multipart),Cookie, Autenticazione.• Xml parser (pull,dom) -next(), getName(), getText()...<menu id="fle" value="File"> <popup> <menuitem value="New" onclick="CreateNewDoc()" /> <menuitem value="Open" onclick="OpenDoc()" /> <menuitem value="Close" onclick="CloseDoc()" /> </popup></menu> Corso Android
  71. 71. Web• Json parser (javascript object notation){"menu": { "id": "fle", "value": "File", "popup": { "menuitem": [ {"value": "New", "onclick": "CreateNewDoc()"}, {"value": "Open", "onclick": "OpenDoc()"}, {"value": "Close", "onclick": "CloseDoc()"} ] }}} Corso Android
  72. 72. WebWebWiewUri 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
  73. 73. Androidgrazie... Corso Android

×