Sobes.tech
Junior

Kuidas toimub Android rakendustes initsialiseerimine?

sobes.tech AI

Vastus AI-lt

Android rakenduste algus toimub mitmel etapil ning mõjutab nii operatsioonisüsteemi kui ka rakenduse tasandit.

Peamised etapid:

  1. Rakenduse protsessi käivitamine: Esmakordselt rakenduse komponendi (Activity, Service, BroadcastReceiver jms) käivitamisel loob operatsioonisüsteem selle rakenduse jaoks uue protsessi, kui see veel ei eksisteeri.
  2. DVM/ART-i initsialiseerimine: Loetud protsessis initsialiseerub Android virtuaalmasin (praegu peamiselt ART - Android Runtime). See laadib ja kontrollib rakenduse klasse APK-failist.
  3. Application.onCreate() meetodi täitmine: Kui teie rakendusel on Application klassist pärinev klass, siis selle eksemplar luuakse esimesena ning kutsutakse selle onCreate() meetod. See on ideaalne koht globaalseteks initsialiseerimisteks, näiteks raamatukogude, andmebaaside, analüütika seadistamiseks.
    // Näide `Application` klassist
    public class MyApp extends Application {
    
        @Override
        public void onCreate() {
            super.onCreate();
            // Raamatukogude, singletonite jms initsialiseerimine
            MyDatabase.init(this);
            Analytics.init(this);
        }
    }
    
  4. Rakenduse komponendi loomine: Pärast Application objekti initsialiseerimist loob süsteem nõutud komponendi (Activity, Service jms).
  5. Komponendi elutsükli meetodite täitmine: Activity puhul on see seeria väljakutseid: onCreate(), onStart(), onResume(). Service puhul - onCreate(), onStartCommand() või onBind(). BroadcastReceiver puhul - onReceive(). Nendes meetodites toimub komponendi spetsiifiline initsialiseerimine.
    // Näide Activity `onCreate()` meetodist
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main); // UI initsialiseerimine
    
            // Spetsiifiline initsialiseerimine Activity jaoks
            setupRecyclerView();
            loadDataFromJson();
        }
    }
    
  6. View/UI initsialiseerimine: UI-komponentide puhul (näiteks Activity) toimub pärast setContentView() väljakutset inflatsioon (objektide loomine XML-ist) ning View-komponentide initsialiseerimine.

Olulised aspektid:

  • Hilisem initsialiseerimine: Sageli kasutatakse objekti loomise edasi lükkamiseks kuni selle esimese kasutamiseni, et kiirendada rakenduse käivitust.
  • Injection Frameworks (DI): Raamatukogud nagu Dagger, Koin, Hilt automatiseerivad sõltuvuste loomise ja pakkumise, lihtsustades objektide initsialiseerimist ja nende ühendamist.
  • Statilised initsialiseerijad: Täidetakse klassi esimese laadimise ajal mälust.
  • Konstruktorites initsialiseerimine: Täidetakse klassi eksemplari loomisel.

Rakenduse tasandil (esimese käivitunud Activity jaoks) on väljakutsete järjekord:

Application.onCreate() -> Activity.onCreate() -> Activity.onStart() -> Activity.onResume()

Nende etappide mõistmine on kriitiline rakenduse käivitamise aja optimeerimiseks ning ressursside õige haldamise tagamiseks.