Profil Startup dan Baseline
Startup dingin yang lebih cepat.
Profil Startup dan Baseline adalah pelajaran Android Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Android Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Android Academy mencakup 4 pelajaran total.
Kesan Pertama: Startup Aplikasi
Waktu startup adalah hal pertama yang dirasakan setiap pengguna. Google Play bahkan menampilkan startup yang lambat sebagai masalah kualitas. Startup dingin yang cepat membuat aplikasi terasa premium; startup yang lambat membuat pengguna pergi.
Dalam pelajaran ini, Anda akan mempelajari tiga jenis startup, hal-hal yang membuat startup lambat, serta alat modern — Startup Aplikasi dan Profil Dasar — yang membuat startup dingin jauh lebih cepat.
Startup Dingin, Hangat, dan Panas
Android mendefinisikan tiga skenario startup, dari yang paling lambat hingga paling cepat:
- Startup dingin: prosesnya belum ada. Android membuatnya, menjalankan
Application, lalu menampilkan layar pertama Anda. Ini yang paling lambat dan paling penting untuk dioptimalkan. - Startup hangat: prosesnya masih hidup, tetapi Aktivitas harus dibuat ulang.
- Startup panas: Aktivitas masih berada di memori; cukup tampilkan kembali ke depan. Hampir seketika.
Upaya pengoptimalan berfokus pada startup dingin, karena inilah yang paling sering dialami pengguna baru dan pengguna yang kembali.
Mengukur Waktu Startup
Anda tidak dapat meningkatkan sesuatu yang tidak Anda ukur. Berikut dua cara mudah:
- Logcat: sistem mencatat baris
Displayedyang berisi waktu hingga frame pertama ditampilkan. - Macrobenchmark:
StartupTimingMetricmemberikan angka startup dingin yang stabil dan dapat diulang.
Jalankan perintah adb di bawah ini dan tunggu baris Displayed.
# Cold-start the app and log time to first frame
adb shell am start -W -S com.example.app/.MainActivity
# Output includes:
# TotalTime: 412 <- ms to first frame
# Or filter logcat:
adb logcat | grep "Displayed com.example.app"Jaga Agar Application.onCreate Tetap Ringan
Semua hal dalam Application.onCreate() berjalan di thread utama sebelum frame pertama Anda. Inisialisasi yang berat di sini secara langsung menunda startup.
Versi buruk di bawah ini menginisialisasi beberapa pustaka secara langsung. Tunda atau jalankan di latar belakang apa pun yang tidak diperlukan untuk layar pertama.
// SLOW: blocks the first frame with eager init
class MyApp : Application() {
override fun onCreate() {
super.onCreate()
Analytics.init(this) // network, disk
ImageLoader.preload(this) // heavy
Database.warmUp(this) // disk I/O
}
}
// Each of these adds milliseconds before the user sees anything.Pustaka Startup Aplikasi Jetpack
Pustaka Startup Aplikasi menggantikan beberapa penyedia konten pustaka (yang masing-masing memerlukan waktu) dengan satu penyedia bersama, serta memungkinkan Anda menyatakan urutan dan dependensi inisialisasi dengan rapi.
Anda mengimplementasikan satu Initializer untuk setiap komponen; Startup Aplikasi menjalankannya sekali sesuai urutan dependensi.
class AnalyticsInitializer : Initializer<Analytics> {
override fun create(context: Context): Analytics {
return Analytics.init(context.applicationContext)
}
// Runs after Logger is ready
override fun dependencies() = listOf(LoggerInitializer::class.java)
}
// Registered via a single merged provider in the manifest,
// avoiding one ContentProvider per library.Inisialisasi Malas dan di Latar Belakang
Daripada mengurutkan pekerjaan yang dilakukan secara langsung, lebih baik lakukan lebih sedikit pekerjaan saat startup. Dua taktiknya:
- Malas: buat objek berat saat pertama kali digunakan dengan
by lazymilik Kotlin. - Latar belakang: pindahkan inisialisasi non-UI dari thread utama.
Sekarang frame pertama tidak terhambat oleh pekerjaan yang belum diperlukan pengguna.
class MyApp : Application() {
// Built only when first accessed, not during onCreate
val imageLoader by lazy { ImageLoader.build(this) }
override fun onCreate() {
super.onCreate()
// Push non-critical setup off the main thread
CoroutineScope(Dispatchers.Default).launch {
Analytics.init(applicationContext)
}
}
}AOT vs JIT: Mengapa Proses Pertama Lambat
Secara default, Android menjalankan bytecode aplikasi Anda dengan gabungan interpretasi dan kompilasi Just-In-Time (JIT). Saat kode yang sering digunakan dijalankan untuk pertama kalinya, kode tersebut masih diinterpretasikan (lambat); baru setelah itu runtime mengompilasinya menjadi kode native.
Inilah alasan startup dingin dan pengguliran pertama terasa lebih lambat. Profil Dasar mengatasinya dengan memberi tahu perangkat untuk mengompilasi kode penting secara Ahead-Of-Time (AOT) saat pemasangan.
Apa Itu Profil Dasar
Profil Dasar adalah daftar kelas dan metode yang digunakan selama alur penting Anda (startup, pengguliran pertama). Profil ini dikirim bersama aplikasi; saat pemasangan, perangkat mengompilasi metode tersebut secara AOT, sehingga metode itu berjalan dengan kecepatan native sejak peluncuran pertama.
Google melaporkan peningkatan startup yang sering berada pada kisaran 20–40%, tanpa perubahan kode pada fitur Anda — cukup dengan profil tersebut.
// build.gradle.kts
plugins { id("androidx.baselineprofile") }
dependencies {
baselineProfile(project(":baselineprofile"))
}
// The generated profile ships as
// assets/dexopt/baseline.prof
// and is applied automatically at install.Membuat Profil Dasar
Anda membuat profil dengan menulis sebuah test kecil yang menjalankan alur penting pada perangkat; alat tersebut merekam metode yang dijalankan dan menulis file profil. Setelah itu, masukkan profil ke dalam repositori dan buat ulang aplikasi.
Berikut generator umum yang merekam startup dan pengguliran.
@RunWith(AndroidJUnit4::class)
class BaselineProfileGenerator {
@get:Rule val rule = BaselineProfileRule()
@Test
fun generate() = rule.collect(packageName = "com.example.app") {
pressHome()
startActivityAndWait()
// exercise the critical journey
device.findObject(By.res("feed")).fling(Direction.DOWN)
}
}
// Run the generateBaselineProfile Gradle task to produce the file.Memverifikasi Hasil
Selalu konfirmasikan peningkatan dengan tolok ukur, dengan membandingkan startup saat profil diterapkan dan saat tidak diterapkan (CompilationMode.None vs Partial dengan profil).
Jika Anda tidak mengukur, Anda tidak dapat membuktikan bahwa profil tersebut membantu — dan profil yang sudah usang bahkan dapat berdampak buruk. Buat ulang profil setiap kali alur yang sering digunakan berubah secara signifikan.
@Test
fun startupWithProfile() = rule.measureRepeated(
packageName = "com.example.app",
metrics = listOf(StartupTimingMetric()),
iterations = 10,
startupMode = StartupMode.COLD,
compilationMode = CompilationMode.Partial() // uses the baseline profile
) {
pressHome()
startActivityAndWait()
}Rencana Pengoptimalan Startup
Gabungkan semuanya menjadi rencana yang dapat diulang:
- Ukur startup dingin dengan Macrobenchmark dan
adb am start -W. - Ringankan
Application.onCreate: tunda denganby lazy, dan pindahkan pekerjaan dari thread utama. - Gunakan Startup Aplikasi untuk menggabungkan penyedia konten dan mengurutkan inisialisasi.
- Sertakan Profil Dasar untuk kompilasi AOT pada alur penting.
- Verifikasi dengan tolok ukur dan pastikan profil tetap terbaru.
Hasilnya: frame pertama yang cepat dan langsung dirasakan pengguna.
Pemeriksaan Singkat
Anda menyertakan Profil Dasar bersama aplikasi. Apa fungsi utamanya dalam meningkatkan startup?
Ringkasan: Cepat Sejak Frame Pertama
Anda telah mempelajari cara mengoptimalkan startup, metrik performa yang paling terlihat:
- Optimalkan startup dingin; ukur dengan Macrobenchmark dan
adb am start -W. - Jaga agar
Application.onCreatetetap ringan: gunakan inisialisasi malas dan jalankan pekerjaan non-UI di latar belakang. - Gunakan pustaka Startup Aplikasi untuk menggabungkan penyedia dan mengurutkan inisialisasi.
- Sertakan Profil Dasar agar kode yang sering digunakan dikompilasi secara AOT saat pemasangan dan berjalan dengan kecepatan native pada proses pertama.
- Selalu verifikasi hasilnya dengan tolok ukur dan pertahankan profil tetap terbaru.
Dengan demikian, bagian Pengoptimalan Performa & Pembuatan Profil selesai: kini Anda dapat mengukur, mengendalikan rekomposisi, memperbaiki kebocoran, dan membuat aplikasi memulai dengan cepat.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Profil Startup dan Baseline” gratis?
Ya — teks lengkap “Profil Startup dan Baseline” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Android Academy, upgrade ke CoddyKit PRO. Kursus Android Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Profil Startup dan Baseline”?
Startup dingin yang lebih cepat. Kamu berlatih Android Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Android Academy?
Tidak diperlukan pengalaman sebelumnya. Android Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Profil Startup dan Baseline” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Android Academy ini?
Ya. Setiap pelajaran Android Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Mengukur Kinerja
- Menjinakkan Rekomposisi
- Kebocoran Memori dan Perbaikannya
- Profil Startup dan Baseline