Sobes.tech
Middle+

Tətbiqin yavaş soyuq işə başlamasının səbəblərini har yerdə axtarardınız?

sobes.tech Süni İntellekt

AI-dan cavab

  1. Obyektlərin başlanması: Application.onCreate() və ya ilk Activity-də bahalı əməliyyatlar, məsələn, məlumatların yüklənməsi, kitabxanaların başlanması.
  2. Faylların oxunması: İşə salınarkən diskdə böyük həcmdə məlumatların oxunması.
  3. Verilənlər bazası əməliyyatları: Yavaş sorğular və ya işə salınarkən çoxsaylı verilənlər bazası əməliyyatları.
  4. Resursların yüklənməsi: Resursların çox yüklənməsi və ya optimallaşdırılmaması (şəkillər, XML).
  5. Şəbəkə: İşə salınarkən əsas axında sinxron şəbəkə sorğuları.
  6. JIT-kompilyasiya: ART-in ilk işə salınmada JIT-kompilyasiya üçün sərf etdiyi vaxt.
  7. Layout-inflation: İlk Activity-də mürəkkəb və ya dərin View hierarxiyası, uzun vaxt alır.
  8. Əsas axını bloklama: İşə salınarkən əsas axında uzun müddətli əməliyyatlar.

Alətlər:

  • Android Profiler (CPU Profiler, Sistem İzləri).
  • Startup Profiler (sinifin başlanma vaxtını ölçmək üçün xüsusi alət).
  • Traceview/Systrace (funksiya çağırışlarının detallı analizi üçün).
  • logcat (şübhəli loglar və ya səhvləri tapmaq üçün).
  • adb shell am start -W <paket_adi>/<aktivlik_adi> (ümumi işə salma vaxtını ölçmək üçün).
// Vaxtın ölçülməsi nümunəsi
class MyApplication : Application() {
    override fun onCreate() {
        val startTime = System.currentTimeMillis()
        super.onCreate()

        // Uzun çəkə biləcək başlanğıc:
        // MyDatabase.initialize(this)
        // SomeLibrary.setup()
        // LoadInitialData.execute()

        val endTime = System.currentTimeMillis()
        Log.d("StartupTime", "Application onCreate ${endTime - startTime} ms çəkdi")
    }
}

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        val startTime = System.currentTimeMillis()
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // UI və ya məlumat ilə əlaqəli bahalı əməliyyatlar
        // setupRecyclerView()
        // loadContentFromNetwork()

        val endTime = System.currentTimeMillis()
        Log.d("StartupTime", "MainActivity onCreate ${endTime - startTime} ms çəkdi")
    }
}

İlk Activity-nin onCreate, onStart, onResume metodlarına və Application.onCreate()-ə diqqət yetirin.