Middle+
Kus otsiksid rakenduse aeglast ja jahtimist põhjustavaid põhjuseid?
sobes.tech AI
Vastus AI-lt
- Objektu initsialiseerimine: Kallid toimingud
Application.onCreate()või esimese Activity ajal, näiteks andmete laadimine, raamatukogude initsialiseerimine. - Failide lugemine: Suurte andmemahtude lugemine kettalt käivitamisel.
- Andmebaasi toimingud: Aeglased päringud või suur andmebaasioperatsioonide arv käivitamisel.
- Resursside laadimine: Liigne või mitteoptimeeritud ressursside (pildid, XML-i paigutused) laadimine.
- Võrk: Sünkroonsed võrgupäringud peamise lõime ajal käivitamisel.
- JIT kompileerimine: Aeg, mille ART kulutab JIT-kompileerimisele esimese käivitamise ajal pärast installimist/uudistamist.
- Layout Inflation: Keeruline või sügav View hierarhia esimeses Activity, mis nõuab pikka aega inflatsiooniks.
- Peamise lõime blokeerimine: Igasugused pikaajalised toimingud, mis toimuvad peamise lõime ajal käivitamisel.
Tööriistad:
- Android Profiler (CPU Profiler, System Trace).
- Startup Profiler (spetsiaalne tööriist klassi initsialiseerimise aja mõõtmiseks).
- Traceview/Systrace (üksikasjalik funktsioonide väljakutsete analüüs).
- logcat (kahtlaste logide või vigade otsimiseks käivitamise ajal).
adb shell am start -W <täis_paketi_nimi>/<täis_akti_nimi>(üldise käivitamise aja mõõtmiseks).
// Näide aja mõõtmisest koodis
class MyApplication : Application() {
override fun onCreate() {
val startTime = System.currentTimeMillis()
super.onCreate()
// Initsialiseerimine, mis võib olla pikk:
// MyDatabase.initialize(this)
// SomeLibrary.setup()
// LoadInitialData.execute()
val endTime = System.currentTimeMillis()
Log.d("StartupTime", "Application onCreate võttis ${endTime - startTime} ms")
}
}
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
val startTime = System.currentTimeMillis()
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Kallid toimingud, mis on seotud UI või andmetega
// setupRecyclerView()
// loadContentFromNetwork()
val endTime = System.currentTimeMillis()
Log.d("StartupTime", "MainActivity onCreate võttis ${endTime - startTime} ms")
}
}
Fookus on Application.onCreate() ja esimeste elutsükli meetodite kasutamisel esimese Activity (onCreate, onStart, onResume).