• Programmazione Android
  • CORSI ONLINE
  • Web Agency

Logo

Corsi di programmazione web e mobile online
Navigation
  • Home
  • CORSI ONLINE
  • Tutorial Pratici
  • GUIDE COMPLETE
    • Corso completo di C
    • Corso videogame con Cocos2d
    • Programmazione Cocoa Touch
  • Sezioni
    • Libri e manuali
    • Tips & Tricks
    • Risorse utili
    • Strumenti di Sviluppo
    • Materiale OpenSource
    • Framework
    • Guide Teoriche
    • Guide varie
    • Grafica e Design
    • iPad
    • News
    • Video Tutorial
    • Windows Phone
  • Pubblicità
  • About
    • Chi siamo
    • Pubblicazioni
    • Collabora
    • Sostieni devAPP

Android: comprendere il Context

By Giuseppe Maggi | on 3 Maggio 2018 | 1 commento
Android
android context

Il Context è costituito da un insieme di informazioni riguardanti l’ambiente di esecuzione di un’app Android. Per il programmatore rappresenta, l’oggetto “magico” cui chiedere un riferimento a qualsiasi cosa sia al di fuori dell’applicazione ma all’interno del sistema operativo. Il neo-sviluppatore lo incontra ben presto, sin dai primi esempi di programmazione: basti ricordare che anche per ottenere un semplice Toast (rapida notifica che offre un messaggio all’utente) in un’Activity è necessario passare un riferimento al Context.

Toast.makeText(this, 
                     "Ciao!",
                              Toast.LENGTH_LONG).show();

Nell’esempio appena riportato, il this rappresenta il riferimento all’Activity ma soprattutto al Context che essa contiene.

Ma nonostante lo si usi sin dalle prime righe di codice Android, spesso permangono molti dubbi sul Context, alcuni dei quali – se non risolti – possono far incappare in pericolosi errori di memoria detti memory leak. Cerchiamo di dare una risposta ai più comuni.

Dove trovo un Context?

Durante l’esecuzione di un’applicazione, molti Context esistono contemporaneamente e tanti vengono via via deallocati e sostituiti da altri.

La figura seguente mostra alcune classi del framework che mediante il meccanismo dell’ereditarietà costruiscono il Context che usiamo nelle applicazioni

Ogni componente per applicazioni Android dispone di un riferimento al Context:

  • Application che rappresenta l’applicazione nel suo complesso lo eredita (vedi figura);
  • Activity e Service lo ereditano anch’essi (vedi figura anche in questo caso);
  • i ContentProvider lo ottengono dal loro metodo getContext();
  • i BroadcastReceiver lo ricevono come argomento nel loro metodo onReceive().

Quale Context usare?

In molti casi, possiamo scegliere tra più Context. Ad esempio, all’interno di un’Activity disponiamo del Context che l’Activity eredita e di quello offerto dall’oggetto Application.

Quali le differenze:

  • il Context dell’Activity condivide il suo ciclo di vita pertanto va usato solo in classi che collaboreranno strettamente con essa. Quando l’Activity verrà fermata e (probabilmente) distrutta secondo quanto previsto dal suo ciclo di vita, anche il Context ad essa legato non sarà più utilizzabile. Conservare tale Context in elementi che potrebbero sopravvivere ad un’Activity espone l’applicazione a possibili memory leak;
  • il Context dell’Application va utilizzato ogni volta che un suo riferimento deve sopravvivere ai componenti (si pensi ad Activity ma anche Service e altro ancora). Ciò protegge dai memory leak.

L’esempio del capo e dell’assistente

Spesso si usa un esempio per spiegare il vero ruolo del Context, quello del capo e dell’assistente. Immaginiamo un capo ufficio che sa gestire bene il suo lavoro ma per poterlo fare ha bisogno del continuo supporto dell’assistente. Ha bisogno di consultare un fascicolo dello schedario? Lo chiede all’assistente. Desidera un caffè per darsi la carica? Lo chiede all’assistente. E così via.

Trasponendo l’esempio in Android, il capo è l’applicazione mentre l’assistente è il Context. I fascicoli, il caffè e qualsiasi altra cosa l’assistente procuri al suo capo simboleggiano le risorse che il Context fornisce continuamente.

Conclusioni

Perchè si reputa necessario fornire un esempio come quello del capo e dell’assistente? Perchè il Context è facile da utilizzare, almeno in prima battuta fornendo un riferimento all’Activity, ma nasconde un significato più profondo che al complicarsi delle applicazioni può mettere in difficoltà il programmatore.

Con questo post abbiamo cercato di fare un pò di chiarezza. Cosa ne pensate? Avete qualche considerazione interessante sull’argomento?

Commentate e fateci sapere. Vi aspettiamo!

 

Share this story:
  • tweet

Tags: Activityandroidapplication context

Recent Posts

  • Parte il percorso programmatori iOS in Swift su devACADEMY.it

    20 Dicembre 2017 - 0 Comment
  • Android, crittografare dati velocemente con Encryption

    24 Settembre 2018 - 0 Comment
  • Sql2o, accesso immediato ai database tramite Java

    3 Settembre 2018 - 0 Comment
  • Okio, libreria per ottimizzare l’input/output in Java

    27 Agosto 2018 - 0 Comment

Related Posts

  • IntelliJ IDEA: IDE per programmare in Java e Kotlin

    25 Luglio 2018 - 0 Comment
  • Android: usare Connect Pattern

    10 Luglio 2018 - 0 Comment
  • Android: il metodo findViewById() non richiede più il cast

    21 Giugno 2018 - 0 Comment

Author Description

One Response to “Android: comprendere il Context”

  1. 20 Agosto 2019

    Bruno

    Quando si ha poco tempo e si ha bisogno di informazioni che spiegano in maniera succinta un argomento, chiarendo i principi di base, questo genere di articoli sono un validissimo aiuto.
    Grazie per la spiegazione semplice ed immediata.

Leave a Reply

Your email address will not be published. Required fields are marked *


*
*

Corso online di programmazione android e java

SEZIONI

  • Android
  • Comunicazioni
  • Contest
  • Corsi ed Eventi
  • Corso completo di C
  • Corso programmazione videogiochi
  • Framework
  • Grafica e Design
  • Guida rapida alla programmazione Cocoa Touch
  • Guide Teoriche
  • Guide varie
  • iPad
  • Le nostre applicazioni
  • Libri e manuali
  • Materiale OpenSource
  • News
  • Pillole di C++
  • Progetti completi
  • Risorse utili
  • Strumenti di Sviluppo
  • Swift
  • Tips & Tricks
  • Tutorial Pratici
  • Video Tutorial
  • Windows Phone

Siti Amici

  • Adrirobot
  • Allmobileworld
  • Apple Notizie
  • Apple Tribù
  • Avvocato360
  • Blog informatico 360°
  • bubi devs
  • fotogriPhone
  • GiovaTech
  • iApp-Mac
  • iOS Developer Program
  • iPodMania
  • MelaRumors
  • Meritocracy
  • SoloTablet
  • TecnoUser
  • Privacy & Cookie Policy
©2009-2018 devAPP - All Rights Reserved | Contattaci
devAPP.it è un progetto di DEVAPP S.R.L. - Web & Mobile Agency di Torino
Str. Volpiano, 54 - 10040 Leini (TO) - C.F. e P.IVA 11263180017 - REA TO1199665 - Cap. Soc. € 10.000,00 i.v.

devACADEMY.it

Vuoi imparare a programmare?

Iscriviti e accedi a TUTTI i corsi con un’unica iscrizione.
Oltre 70 corsi e migliaia di videolezioni online e in italiano a tua disposizione.

ISCRIVITI SUBITO