Sobes.tech
Middle+

Hol keresnéd az alkalmazás lassú hideg indításának okait?

sobes.tech MI

Válasz az MI-től

  1. Objektumok inicializálása: Költséges műveletek az Application.onCreate()-ben vagy az első Activity-ben, például adatok betöltése, könyvtárak inicializálása.
  2. Fájlok olvasása: Nagyszámú adat olvasása fájlokból az indítás során.
  3. Adatbázis műveletek: Lassú lekérdezések vagy sok adatbázis művelet az indításkor.
  4. Erőforrások betöltése: Túlzott vagy nem optimalizált erőforrás betöltés (képek, XML elrendezések).
  5. Hálózat: Szinkron hálózati kérések a fő szálon az indítás során.
  6. JIT fordítás: Az ART által az első indításkor a JIT fordításra fordított idő.
  7. Elrendezés betöltése: Bonyolult vagy mély View hierarchia az első Activity-ben, ami hosszú időt vesz igénybe a betöltéshez.
  8. A fő szál blokkolása: Bármilyen hosszú művelet, ami a fő szálon fut az indítás során.

Eszközök:

  • Android Profiler (CPU Profiler, System Trace).
  • Startup Profiler (speciális eszköz az osztály inicializálási idő mérésére).
  • Traceview/Systrace (részletes funkcióhívás elemzéshez).
  • logcat (kételyes naplók vagy hibák keresése az indítás során).
  • adb shell am start -W <csomag_neve>/<aktivitás_neve> (az indítás összesített idejének méréséhez).
// Idő mérés példája kódban
class MyApplication : Application() {
    override fun onCreate() {
        val startTime = System.currentTimeMillis()
        super.onCreate()

        // Hosszú lehet az inicializálás:
        // MyDatabase.initialize(this)
        // SomeLibrary.setup()
        // LoadInitialData.execute()

        val endTime = System.currentTimeMillis()
        Log.d("StartupTime", "Application onCreate ${endTime - startTime} ms-be telt")
    }
}

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        val startTime = System.currentTimeMillis()
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // Költséges műveletek UI-hoz vagy adatokhoz
        // setupRecyclerView()
        // loadContentFromNetwork()

        val endTime = System.currentTimeMillis()
        Log.d("StartupTime", "MainActivity onCreate ${endTime - startTime} ms-be telt")
    }
}

Fókusz az Application.onCreate()-re és az első Activity életciklusának első módszereire (onCreate, onStart, onResume).