Profil Permulaan dan Asas
Permulaan sejuk yang lebih pantas.
Profil Permulaan dan Asas ialah pelajaran Android Academy percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Android Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Android Academy merangkumi sejumlah 4 pelajaran.
Tanggapan Pertama: Permulaan Aplikasi
Masa permulaan ialah perkara pertama yang dialami oleh setiap pengguna. Google Play malah memaparkan permulaan yang perlahan sebagai isu kualiti. Permulaan sejuk yang pantas menjadikan aplikasi terasa berkualiti tinggi; permulaan yang perlahan menyebabkan pengguna meninggalkannya.
Dalam pelajaran ini, anda akan mempelajari tiga jenis permulaan, perkara yang menyebabkan permulaan menjadi perlahan, serta alat moden — App Startup dan Baseline Profiles — yang menjadikan permulaan sejuk jauh lebih pantas.
Permulaan Sejuk, Suam dan Panas
Android mentakrifkan tiga senario permulaan, daripada paling perlahan hingga paling pantas:
- Permulaan sejuk: proses belum wujud. Android menciptanya, menjalankan
Application, kemudian memaparkan skrin pertama anda. Ini yang paling perlahan dan paling penting untuk dioptimumkan. - Permulaan suam: proses masih hidup tetapi Activity perlu dicipta semula.
- Permulaan panas: Activity masih dalam memori; bawa sahaja ke hadapan. Hampir serta-merta.
Usaha pengoptimuman tertumpu pada permulaan sejuk kerana itulah yang paling kerap dialami oleh pengguna baharu dan pengguna yang kembali.
Mengukur Masa Permulaan
Anda tidak boleh menambah baik perkara yang tidak diukur. Dua cara mudah:
- Logcat: sistem mencatat baris
Displayeddengan masa sehingga bingkai pertama. - Macrobenchmark:
StartupTimingMetricmemberikan nombor permulaan sejuk yang stabil dan boleh diulang.
Jalankan perintah adb di bawah dan perhatikan 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"Pastikan Application.onCreate Ringan
Segala-galanya dalam Application.onCreate() berjalan pada utas utama sebelum bingkai pertama anda. Pemulaan berat di sini melambatkan permulaan secara langsung.
Versi yang tidak baik di bawah memulakan beberapa pustaka secara segera. Tangguhkan atau jalankan di latar belakang apa-apa yang tidak diperlukan untuk skrin 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 Jetpack App Startup
Pustaka App Startup menggantikan berbilang pembekal kandungan pustaka (setiap satunya mengambil masa) dengan satu pembekal dikongsi, serta membolehkan anda menyatakan susunan pemulaan dan kebergantungan dengan kemas.
Anda melaksanakan satu Initializer bagi setiap komponen; App Startup menjalankannya sekali mengikut susunan kebergantungan.
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.Pemulaan Malas dan Latar Belakang
Lebih baik daripada menyusun kerja segera ialah melakukan kurang kerja semasa permulaan. Dua taktik:
- Malas: bina objek berat apabila digunakan buat kali pertama dengan
by lazyKotlin. - Latar belakang: pindahkan pemulaan bukan UI keluar daripada utas utama.
Dengan itu, bingkai pertama tidak disekat oleh kerja yang belum diperlukan oleh 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 berbanding JIT: Mengapa Jalankan Kali Pertama Perlahan
Secara lalai, Android menjalankan bytekod aplikasi anda dengan gabungan tafsiran dan kompilasi Just-In-Time (JIT). Apabila kod panas dijalankan buat kali pertama, kod itu ditafsirkan (perlahan); hanya kemudian masa jalan menyusunnya kepada kod asli.
Inilah sebabnya permulaan sejuk dan tatalan pertama terasa lebih perlahan. Baseline Profiles menyelesaikan masalah ini dengan memberitahu peranti supaya menyusun kod penting secara Ahead-Of-Time (AOT) semasa pemasangan.
Maksud Baseline Profile
Baseline Profile ialah senarai kelas dan kaedah yang digunakan sepanjang perjalanan kritikal anda (permulaan, tatalan pertama). Anda menghantarnya bersama aplikasi; semasa pemasangan, peranti menyusun kaedah tersebut secara AOT supaya kaedah itu berjalan pada kelajuan asli sejak pelancaran pertama.
Google melaporkan peningkatan permulaan yang lazimnya sekitar 20–40%, tanpa perubahan kod pada ciri anda — hanya 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.Menjana Baseline Profile
Anda menjana profil dengan menulis satu ujian kecil yang menggerakkan laluan kritikal anda pada peranti; alat tersebut merekod kaedah yang dijalankan dan menulis fail profil. Kemudian anda memasukkannya ke dalam repositori dan membina semula aplikasi.
Berikut ialah penjana lazim yang merakam permulaan dan satu tatalan.
@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.Mengesahkan Kejayaan
Sentiasa sahkan peningkatan dengan penanda aras, dengan membandingkan permulaan menggunakan dan tanpa profil yang digunakan (CompilationMode.None berbanding Partial dengan profil tersebut).
Jika anda tidak mengukur, anda tidak dapat membuktikan bahawa profil itu membantu — malah profil yang lapuk boleh menjejaskan prestasi. Jana semula profil itu apabila laluan panas anda berubah dengan ketara.
@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()
}Pelan Pengoptimuman Permulaan
Gabungkan semuanya menjadi pelan yang boleh diulang:
- Ukur permulaan sejuk dengan Macrobenchmark dan
adb am start -W. - Kurangkan
Application.onCreate: tangguhkan denganby lazy, dan pindahkan kerja keluar daripada utas utama. - Gunakan App Startup untuk menggabungkan pembekal kandungan dan menyusun pemulaan.
- Hantar Baseline Profile untuk penyusunan AOT bagi laluan kritikal.
- Sahkan dengan penanda aras dan pastikan profil sentiasa terkini.
Hasilnya: bingkai pertama yang pantas dan lancar, yang akan disedari oleh pengguna.
Semakan Pantas
Anda menghantar Baseline Profile bersama aplikasi anda. Apakah fungsi utamanya untuk menambah baik permulaan?
Imbas Kembali: Pantas Sejak Bingkai Pertama
Anda telah mempelajari cara mengoptimumkan permulaan, iaitu metrik prestasi yang paling ketara:
- Optimumkan permulaan sejuk; ukur dengan Macrobenchmark dan
adb am start -W. - Pastikan
Application.onCreateringan: pemulaan malas dan kerja bukan UI di latar belakang. - Gunakan pustaka App Startup untuk menggabungkan pembekal dan menyusun pemula.
- Hantar Baseline Profile supaya kod panas disusun secara AOT semasa pemasangan untuk kelajuan asli pada larian pertama.
- Sentiasa sahkan kejayaan dengan penanda aras dan pastikan profil sentiasa terkini.
Itu melengkapkan Pengoptimuman & Pemprofilan Prestasi: kini anda boleh mengukur, mengawal penggubahan semula, membaiki kebocoran dan memulakan aplikasi dengan pantas.
Pelajari Kotlin dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 36
- Pelajaran
- 152
Soalan Lazim
Adakah pelajaran “Profil Permulaan dan Asas” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Android Academy, termasuk “Profil Permulaan dan Asas”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Android Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Profil Permulaan dan Asas”?
Permulaan sejuk yang lebih pantas. Anda berlatih Android Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Android Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Android Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.
Berapa lamakah pelajaran “Profil Permulaan dan Asas” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Android Academy ini?
Ya. Setiap pelajaran Android Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Mengukur Prestasi
- Menjinakkan Gubahan Semula
- Kebocoran Memori dan Pembetulan
- Profil Permulaan dan Asas