Sobes.tech
Junior

Kako se dešava inicijalizacija u Android aplikacijama?

sobes.tech АИ

Одговор од АИ

Inicializacija u Android aplikacijama odvija se u više faza i utiče na nivo operativnog sistema, kao i na nivo same aplikacije.

Glavni koraci:

  1. Pokretanje procesa aplikacije: Pri prvom pokretanju komponente aplikacije (Activity, Service, BroadcastReceiver itd.) operativni sistem kreira novi proces za tu aplikaciju, ako već ne postoji.
  2. Inicijalizacija DVM/ART: Unutar kreiranog procesa inicijalizuje se Android virtuelna mašina (trenutno uglavnom ART - Android Runtime). Ona učitava i verifikuje klase aplikacije iz APK fajla.
  3. Izvršavanje metode Application.onCreate(): Ako vaša aplikacija ima klasu koja nasleđuje od Application, njen primerak se kreira prvi, i poziva se njegova metoda onCreate(). Ovo je idealno mesto za globalnu inicijalizaciju, na primer, podešavanje biblioteka, baza podataka, analitika.
    // Primer Application klase
    public class MyApp extends Application {
    
        @Override
        public void onCreate() {
            super.onCreate();
            // Inicijalizacija biblioteka, singletona itd.
            MyDatabase.init(this);
            Analytics.init(this);
        }
    }
    
  4. Kreiranje komponente aplikacije: Nakon inicijalizacije objekta Application, sistem kreira traženu komponentu (Activity, Service itd.).
  5. Izvršavanje metoda životnog ciklusa komponente: Za Activity to je serija poziva: onCreate(), onStart(), onResume(). Za Service - onCreate(), onStartCommand() ili onBind(). Za BroadcastReceiver - onReceive(). U tim metodama dešava se specifična inicijalizacija za komponentu.
    // Primer Activity onCreate
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main); // Inicijalizacija UI
    
            // Specifična inicijalizacija za Activity
            setupRecyclerView();
            loadDataFromJson();
        }
    }
    
  6. Inicijalizacija Views/UI: U slučaju UI komponenti (npr. Activity), nakon poziva setContentView(), vrši se inflacija (kreiranje objekata iz XML-a) i inicijalizacija View komponenti.

Važni aspekti:

  • Lagana inicijalizacija: Često se koristi za odlaganje kreiranja objekata do prvog korišćenja, radi ubrzanja pokretanja aplikacije.
  • Injection Frameworks (DI): Biblioteke poput Dagger, Koin, Hilt automatizuju proces kreiranja i obezbeđivanja zavisnosti, pojednostavljujući inicijalizaciju objekata i njihovo povezivanje.
  • Staticki inicijalizatori: Izvršavaju se pri prvom učitavanju klase u memoriju.
  • Inicijalizacija u konstruktorima: Izvršava se pri kreiranju instance klase.

Redosled poziva na nivou aplikacije (za prvi pokrenuti Activity):

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

Razumevanje ovih faza je ključno za optimizaciju vremena pokretanja aplikacije i pravilno upravljanje resursima.