La documentazione ufficiale di Android sul contesto dice che è un -
Interfaccia alle informazioni globali sull'ambiente di un'applicazione
Quindi fondamentalmente questo è l'oggetto che il run time di Android consegna ad ogni = applicazione Android che viene avviata. Contiene tutte le informazioni globali che l'applicazione ha bisogno di conoscere - risorse di stringhe, risorse di immagini, componenti Android nell'applicazione (Activity Service, Broadcast Receiver & Content Provider).
Molti sviluppatori inesperti fanno l'errore di assumere che ci sia solo una singola istanza di questa classe - che porterà a perdite di memoria nell'applicazione Android.
Quando si fa getApplicationContext() si ottiene un oggetto Singleton Context. Ma quando fai getContext() non ottieni lo stesso contesto Singleton. Ogni attività ottiene la propria istanza di Context (basta stampare l'hashcode dell'oggetto context). Anche il servizio ottiene la propria istanza dell'oggetto Context.
Se non si presta attenzione a questo minuscolo dettaglio, si otterranno applicazioni Android di scarse prestazioni, che potrebbero addirittura schiacciarsi. Personalmente ritengo che questo sia il concetto più frainteso nello sviluppo di app Android.
Se volete maggiori dettagli su cosa porta alla perdita di memoria, come individuarla, perché accade e come evitarla, visitate pure questa serie di video.