Sobes.tech
Middle+

Kur meklētu programmas lēnas un aukstas iedarbināšanas iemeslus?

sobes.tech AI

Atbilde no AI

  1. Objektu inicializācija: Dārgas operācijas Application.onCreate() vai pirmajā Activity, piemēram, datu ielāde, bibliotēku inicializācija.
  2. Failu lasīšana: Liela datu daudzuma lasīšana no diska, palaižot lietotni.
  3. Datu bāzes operācijas: Lēni vaicājumi vai liels datu bāzes operāciju skaits palaišanas laikā.
  4. Resursu ielāde: Pārmērīga vai neoptimizēta resursu (attēli, XML izkārtojumi) ielāde.
  5. Tīkls: Sinhroni tīklenes pieprasījumi galvenajā pavedienā palaišanas laikā.
  6. JIT kompilācija: Laiks, ko ART tērē JIT kompilācijai pirmās palaišanas laikā pēc instalēšanas/atjaunināšanas.
  7. Layout Inflation: Sarežģīta vai dziļa View hierarhija pirmajā Activity, kas prasa ilgu laiku, lai to inflētu.
  8. 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).