Middle+
Kur meklētu programmas lēnas un aukstas iedarbināšanas iemeslus?
sobes.tech AI
Atbilde no AI
- Objektu inicializācija: Dārgas operācijas
Application.onCreate()vai pirmajā Activity, piemēram, datu ielāde, bibliotēku inicializācija. - Failu lasīšana: Liela datu daudzuma lasīšana no diska, palaižot lietotni.
- Datu bāzes operācijas: Lēni vaicājumi vai liels datu bāzes operāciju skaits palaišanas laikā.
- Resursu ielāde: Pārmērīga vai neoptimizēta resursu (attēli, XML izkārtojumi) ielāde.
- Tīkls: Sinhroni tīklenes pieprasījumi galvenajā pavedienā palaišanas laikā.
- JIT kompilācija: Laiks, ko ART tērē JIT kompilācijai pirmās palaišanas laikā pēc instalēšanas/atjaunināšanas.
- Layout Inflation: Sarežģīta vai dziļa View hierarhija pirmajā Activity, kas prasa ilgu laiku, lai to inflētu.
- Galvenā pavediena bloķēšana: Jebkuras ilgstošas operācijas, kas tiek veiktas galvenajā pavedienā palaišanas laikā.
Instrumenti:
- Android Profiler (CPU Profiler, System Trace).
- Startup Profiler (speciāls instruments klases inicializācijas laika mērīšanai).
- Traceview/Systrace (detalizētai funkciju izsaukumu analīzei).
- logcat (lai meklētu aizdomīgas žurnālus vai kļūdas palaišanas laikā).
adb shell am start -W <pilns_pakotnes_nosaukums>/<pilns_aktivitātes_nosaukums>(kopējā palaišanas laika mērīšanai).
// Laika mērīšanas piemērs kodā
class MyApplication : Application() {
override fun onCreate() {
val startTime = System.currentTimeMillis()
super.onCreate()
// Inicializācija, kas var būt ilga:
// MyDatabase.initialize(this)
// SomeLibrary.setup()
// LoadInitialData.execute()
val endTime = System.currentTimeMillis()
Log.d("StartupTime", "Application onCreate took ${endTime - startTime} ms")
}
}
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
val startTime = System.currentTimeMillis()
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Dārgas operācijas, kas saistītas ar UI vai datiem
// setupRecyclerView()
// loadContentFromNetwork()
val endTime = System.currentTimeMillis()
Log.d("StartupTime", "MainActivity onCreate took ${endTime - startTime} ms")
}
}
Fokuss uz Application.onCreate() un pirmajiem dzīves cikla metodēm pirmajā Activity (onCreate, onStart, onResume).