Sobes.tech
Middle+

Kur ieškotumėte programos lėto ir šalto paleidimo priežasčių?

sobes.tech AI

Atsakymas iš AI

  1. Objektų inicializavimas: Brangios operacijos Application.onCreate() arba pirmame Activity, tokios kaip duomenų įkėlimas, bibliotekų inicializavimas.
  2. Failų skaitymas: Didelio kiekio duomenų skaitymas iš failų paleidimo metu.
  3. Duomenų bazės operacijos: Lėti užklausos arba didelis operacijų skaičius su duomenų baze paleidimo metu.
  4. Išteklių įkėlimas: Per didelis arba neoptimizuotas išteklių įkėlimas (vaizdai, XML išdėstymai).
  5. Tinklas: Sinchroniniai tinklo užklausos pagrindiniame sraute paleidimo metu.
  6. JIT kompiliavimas: Laikas, kurį ART skiria JIT kompiliacijai pirmojo paleidimo metu po įdiegimo atnaujinimo.
  7. Išdėstymo įkėlimas: Sudėtinga arba gili View hierarchija pirmame Activity, reikalaujanti ilgai įkelti.
  8. 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).