Sobes.tech
Middle

V čem spočívá rozdíl mezi kontextem aplikace a kontextem aktivity?

sobes.tech AI

Odpověď od AI

Kontext aplikace poskytuje přístup k globálním zdrojům aplikace a má životnost po celou dobu běhu aplikace. Kontext aktivity je vázán na životní cyklus konkrétní aktivity, obsahuje informace o konkrétní obrazovce a umožňuje přístup ke zdrojům specifickým pro tuto aktivitu (například téma).

Hlavní rozdíly:

  • Délka života: Kontext aplikace žije po celou dobu běhu aplikace, zatímco kontext aktivity pouze dokud je daná aktivita aktivní.
  • Rozsah: Kontext aplikace je globální pro celou aplikaci, kontext aktivity je lokální pro konkrétní obrazovku.
  • Přístup ke zdrojům: Kontext aplikace je určen pro obecné zdroje, kontext aktivity pro zdroje specifické pro danou aktivitu (například téma).
  • Únik paměti: Nesprávné použití kontextu aktivity (například jeho ukládání do statického pole) může vést k únikům paměti, protože odkazuje na aktivitu a její zdroje. Kontext aplikace je bezpečnější pro dlouhodobé uložení.

Příklady použití:

  • Získání obecných řetězců nebo barev:
    // Kdekoli v aplikaci
    val appName = applicationContext.getString(R.string.app_name)
    
  • Vytvoření pohledu v aktivitě:
    // Uvnitř aktivity
    val textView = TextView(this /* nebo this@MyActivity */)
    
  • Spuštění nové aktivity:
    // Uvnitř aktivity
    val intent = Intent(this, JináActivity::class.java)
    startActivity(intent)
    
  • Přístup ke SharedPreferences:
    // Oba kontexty fungují, ale při použití Context.MODE_PRIVATE je vhodnější kontext aktivity
    val prefs = getSharedPreferences("moje_prefs", Context.MODE_PRIVATE)
    

Je důležité používat odpovídající kontext, aby se předešlo únikům paměti a správnému chování aplikace. Ve většině případů se pro operace specifické pro UI používá kontext aktivity, pro úkoly nesouvisející s konkrétní obrazovkou je vhodnější kontext aplikace.