Middle+
Kde byste hledali příčiny pomalého studeného spuštění aplikace?
sobes.tech AI
Odpověď od AI
- Inicializace objektů: Nákladné operace v
Application.onCreate()nebo v prvním Activity, jako je načítání dat, inicializace knihoven. - Čtení souborů: Čtení velkého množství dat ze souborů při spuštění.
- Operace s databází: Pomalé dotazy nebo velké množství operací s databází při startu.
- Načítání zdrojů: Nadměrné nebo neoptimalizované načítání zdrojů (obrázky, XML rozvržení).
- Síť: Synchronní síťové požadavky na hlavním vlákně během spuštění.
- JIT kompilace: Čas, který ART věnuje JIT kompilaci kódu při prvním spuštění po instalaci/aktualizaci.
- Vytváření rozvržení: Složitá nebo hluboká hierarchie View při prvním Activity, která vyžaduje dlouhou dobu na inflaci.
- Zablokování hlavního vlákna: Jakékoli dlouhé operace prováděné na hlavním vlákně během spuštění.
Nástroje:
- Android Profiler (CPU Profiler, System Trace).
- Startup Profiler (speciální nástroj pro měření času inicializace třídy).
- Traceview/Systrace (pro detailní analýzu volání funkcí).
- logcat (pro hledání podezřelých logů nebo chyb během spuštění).
adb shell am start -W <celé_jméno_balíčku>/<celé_jméno_aktivity>(pro měření celkového času spuštění).
// Příklad měření času v kódu
class MyApplication : Application() {
override fun onCreate() {
val startTime = System.currentTimeMillis()
super.onCreate()
// Inicializace, která může být dlouhá:
// MyDatabase.initialize(this)
// SomeLibrary.setup()
// LoadInitialData.execute()
val endTime = System.currentTimeMillis()
Log.d("StartupTime", "Application onCreate trvalo ${endTime - startTime} ms")
}
}
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
val startTime = System.currentTimeMillis()
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Nákladné operace související s UI nebo daty
// setupRecyclerView()
// loadContentFromNetwork()
val endTime = System.currentTimeMillis()
Log.d("StartupTime", "MainActivity onCreate trvalo ${endTime - startTime} ms")
}
}
Zaměření na Application.onCreate() a první metody životního cyklu prvního Activity (onCreate, onStart, onResume).