Sobes.tech
Junior

Kaip vyksta inicializacija Android programose?

sobes.tech AI

Atsakymas iš AI

„Android“ programų inicializacija vyksta keliuose etapuose ir veikia tiek operacinės sistemos, tiek programėlės lygyje.

Pagrindiniai etapai:

  1. Programos proceso paleidimas: Pirmą kartą paleidus programos komponentą (Activity, Service, BroadcastReceiver ir kt.), operacinė sistema sukuria naują procesą šiai programai, jei jis dar neegzistuoja.
  2. DVM/ART inicializavimas: Sukurtame procese inicializuojama Android virtualioji mašina (dabar daugiausia ART - Android Runtime). Ji įkelia ir patvirtina programos klases iš APK failo.
  3. Application.onCreate() metodo vykdymas: Jei jūsų programai yra Application klasės paveldėjimo klasė, jos egzempliorius sukuriamas pirmas, ir kviečiamas jos onCreate() metodas. Tai yra ideali vieta globaliai inicializacijai, pvz., bibliotekų, duomenų bazių, analizės nustatymui.
    // Programos `Application` klasės pavyzdys
    public class MyApp extends Application {
    
        @Override
        public void onCreate() {
            super.onCreate();
            // Bibliotekų, singletonų ir pan. inicializacija
            MyDatabase.init(this);
            Analytics.init(this);
        }
    }
    
  4. Programos komponento sukūrimas: Po Application objekto inicializacijos sistema sukuria pageidaujamą komponentą (Activity, Service ir kt.).
  5. Komponento gyvavimo ciklo metodų vykdymas: Activity atveju tai serija iškvietimų: onCreate(), onStart(), onResume(). Service - onCreate(), onStartCommand() arba onBind(). BroadcastReceiver - onReceive(). Šiuose metoduose vyksta specifinė komponento inicializacija.
    // Activity onCreate pavyzdys
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main); // UI inicializacija
    
            // Specifinė Activity inicializacija
            setupRecyclerView();
            loadDataFromJson();
        }
    }
    
  6. View/UI inicializacija: UI komponentų atveju (pvz., Activity), po setContentView() iškvietimo vyksta inflacija (objektų kūrimas iš XML) ir View komponentų inicializacija.

Svarbūs aspektai:

  • Vėlyva inicializacija: Dažnai naudojama objektų kūrimui po jų pirmojo naudojimo, siekiant pagreitinti programos paleidimą.
  • Injection Frameworks (DI): Tokios bibliotekos kaip Dagger, Koin, Hilt automatizuoja priklausomybių kūrimą ir teikimą, supaprastina objektų inicializaciją ir jų sujungimą.
  • Statiniai inicializatoriai: Vykdomi pirmą kartą įkeliant klasę į atmintį.
  • Konstruktoriuose vykdoma inicializacija: Vykdoma kuriant klasės egzempliorių.

Programos lygyje (pirmojo paleidžiamo Activity atveju) kvietimų tvarka:

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

Šių etapų supratimas yra labai svarbus programos paleidimo laiko optimizavimui ir išteklių valdymui.