Middle+
Kur ieškotumėte programos lėto ir šalto paleidimo priežasčių?
sobes.tech AI
Atsakymas iš AI
- Objektų inicializavimas: Brangios operacijos
Application.onCreate()arba pirmame Activity, tokios kaip duomenų įkėlimas, bibliotekų inicializavimas. - Failų skaitymas: Didelio kiekio duomenų skaitymas iš failų paleidimo metu.
- Duomenų bazės operacijos: Lėti užklausos arba didelis operacijų skaičius su duomenų baze paleidimo metu.
- Išteklių įkėlimas: Per didelis arba neoptimizuotas išteklių įkėlimas (vaizdai, XML išdėstymai).
- Tinklas: Sinchroniniai tinklo užklausos pagrindiniame sraute paleidimo metu.
- JIT kompiliavimas: Laikas, kurį ART skiria JIT kompiliacijai pirmojo paleidimo metu po įdiegimo atnaujinimo.
- Išdėstymo įkėlimas: Sudėtinga arba gili View hierarchija pirmame Activity, reikalaujanti ilgai įkelti.
- Pagrindinio srauto blokavimas: Bet kokios ilgai trunkančios operacijos, vykdomos pagrindiniame sraute paleidimo metu.
Įrankiai:
- Android Profiler (CPU Profiler, System Trace).
- Startup Profiler (specialus įrankis klasės inicializacijos laikui matuoti).
- Traceview/Systrace (detali funkcijų kvietimų analizė).
- logcat (įtartinų žurnalų ar klaidų paieška paleidimo metu).
adb shell am start -W <paketo_vardas>/<aktyvumo_vardas>(bendro paleidimo laiko matavimui).
// Laiko matavimo pavyzdys
class MyApplication : Application() {
override fun onCreate() {
val startTime = System.currentTimeMillis()
super.onCreate()
// Ilgai trunkanti inicializacija:
// MyDatabase.initialize(this)
// SomeLibrary.setup()
// LoadInitialData.execute()
val endTime = System.currentTimeMillis()
Log.d("StartupTime", "Application onCreate užtruko ${endTime - startTime} ms")
}
}
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
val startTime = System.currentTimeMillis()
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Brangios operacijos, susijusios su UI ar duomenimis
// setupRecyclerView()
// loadContentFromNetwork()
val endTime = System.currentTimeMillis()
Log.d("StartupTime", "MainActivity onCreate užtruko ${endTime - startTime} ms")
}
}
Dėmesys Application.onCreate() ir pirmosioms gyvenimo ciklo metodams pirmame Activity (onCreate, onStart, onResume).