Sobes.tech
Middle+

Kus otsiksid rakenduse aeglast ja jahtimist põhjustavaid põhjuseid?

sobes.tech AI

Vastus AI-lt

  1. Objektu initsialiseerimine: Kallid toimingud Application.onCreate() või esimese Activity ajal, näiteks andmete laadimine, raamatukogude initsialiseerimine.
  2. Failide lugemine: Suurte andmemahtude lugemine kettalt käivitamisel.
  3. Andmebaasi toimingud: Aeglased päringud või suur andmebaasioperatsioonide arv käivitamisel.
  4. Resursside laadimine: Liigne või mitteoptimeeritud ressursside (pildid, XML-i paigutused) laadimine.
  5. Võrk: Sünkroonsed võrgupäringud peamise lõime ajal käivitamisel.
  6. JIT kompileerimine: Aeg, mille ART kulutab JIT-kompileerimisele esimese käivitamise ajal pärast installimist/uudistamist.
  7. Layout Inflation: Keeruline või sügav View hierarhia esimeses Activity, mis nõuab pikka aega inflatsiooniks.
  8. 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).