Sobes.tech
Junior

Je možné niektoré komponenty neuvádzať v súbore Manifest?

sobes.tech AI

Odpoveď od AI

Áno, je to možné.

Niektoré komponenty sa dynamicky registrujú alebo nie sú priamo súčasťou štandardného životného cyklu Androidu.

Príklady:

  • Dynamické BroadcastReceiver: Môžu byť registrované a odregistrované počas behu pomocou Context.registerReceiver().
    // Registrácia BroadcastReceiver
    LocalBroadcastManager.getInstance(this).registerReceiver(myReceiver, new IntentFilter("com.example.ACTION"));
    // Odregistrovanie
    LocalBroadcastManager.getInstance(this).unregisterReceiver(myReceiver);
    
  • Služby spustené nejasne z iných komponentov: Hoci väčšina Service by mala byť deklarovaná v Manifest, niektoré, používané v rámci existujúcich už deklarovaných komponentov (napríklad Bound Service), môžu byť implicitne naviazané bez samostatnej deklarácie, ak je volajúci komponent už deklarovaný. Je však dobré deklarovať všetky Service.
  • Niektoré typy Worker (API WorkManager): Hoci Worker sú deklarované v Manifest ako súčasť WorkManager (androidx.work.impl.background.systemalarm.RescheduleReceiver a pod.), vaše vlastné triedy Worker nemusia byť priamo deklarované ako <receiver> v súbore Manifest. Deklarujete ich v kóde a WorkManager sa o ich správu postará.
    // Príklad vytvorenia Work Request bez explicitnej deklarácie Worker v Manifest
    WorkRequest myWorkRequest = new OneTimeWorkRequest.Builder(MyWorker.class).build();
    WorkManager.getInstance(this).enqueue(myWorkRequest);
    

Avšak, okrem dynamických BroadcastReceiver a určitých prípadov použitia, väčšina hlavných komponentov (Activity, Service, ContentProvider, statický BroadcastReceiver) by mala byť deklarovaná v AndroidManifest.xml. To je nevyhnutné pre správne fungovanie bezpečnostného systému, správu životného cyklu a prístup k komponentom inými aplikáciami (ak sú exportované).