Studi Kasus

Cara WHOOP mengurangi sesi penguncian layar saat aktif parsial yang berlebihan hingga lebih dari 90%

Waktu baca: 4 menit
Breana Tate
Developer Relations Engineer

Membangun aplikasi Android untuk perangkat wearable berarti pekerjaan sebenarnya dimulai saat layar mati. WHOOP membantu anggota memahami respons tubuh mereka terhadap latihan, pemulihan, tidur, dan stres, dan bagi banyak anggota WHOOP di Android, sinkronisasi dan konektivitas latar belakang yang andal memungkinkan insight tersebut.

Awal tahun ini, Google Play merilis metrik baru di Android vitals: Kunci aktif sebagian yang berlebihan. Metrik ini mengukur persentase sesi pengguna saat penggunaan penguncian layar saat aktif kumulatif yang tidak dikecualikan melebihi 2 jam dalam periode 24 jam. Tujuan metrik ini adalah membantu Anda mengidentifikasi dan mengatasi kemungkinan penyebab pengurasan baterai, yang sangat penting untuk memberikan pengalaman pengguna yang luar biasa.

Mulai 1 Maret 2026, aplikasi yang terus tidak memenuhi batas kualitas dapat dikecualikan dari platform penemuan Google Play. Peringatan juga dapat ditampilkan di listingan Google Play Store, yang menunjukkan bahwa aplikasi mungkin menggunakan lebih banyak baterai daripada yang diperkirakan.

Menurut Mayank Saini, Senior Android Engineer di WHOOP,  “hal ini memberi tim peluang untuk meningkatkan standar efisiensi Android”, setelah Android vitals menandai % penguncian layar saat aktif parsial aplikasi yang berlebihan sebesar 15%—yang melebihi batas 5% yang direkomendasikan.

mayank.png

Tim melihat metrik Android vitals sebagai sinyal yang jelas bahwa tugas latar belakang mereka membuat CPU tetap aktif lebih lama dari yang diperlukan. Dengan menyelesaikannya, mereka dapat terus memberikan pengalaman pengguna yang luar biasa sekaligus mengurangi waktu latar belakang yang terbuang dan mempertahankan konektivitas dan sinkronisasi Bluetooth yang andal dan tepat waktu.

Mengidentifikasi masalah

Untuk mengetahui cara memulai, tim terlebih dahulu membuka Android vitals untuk mendapatkan lebih banyak insight tentang kunci aktif yang memengaruhi metrik. Dengan melihat dasbor penguncian layar saat aktif sebagian yang berlebihan di Android vitals, mereka dapat mengidentifikasi penyebab terbesar penguncian layar saat aktif sebagian yang berlebihan sebagai salah satu pekerja WorkManager mereka (diidentifikasi di dasbor sebagai androidx.work.impl.background.systemjob.SystemJobService). Untuk mendukung “pengalaman selalu aktif” WHOOP, aplikasi menggunakan WorkManager untuk tugas latar belakang seperti sinkronisasi berkala dan memberikan update berulang ke perangkat wearable. 

Meskipun tim menyadari bahwa WorkManager mendapatkan kunci aktif saat menjalankan tugas di latar belakang, sebelumnya mereka tidak memiliki visibilitas tentang cara semua pekerjaan latar belakang mereka (tidak hanya WorkManager) didistribusikan hingga diperkenalkannya metrik kunci aktif parsial berlebihan di Vitals Android.

Dengan dasbor yang mengidentifikasi WorkManager sebagai kontributor utama, tim kemudian dapat memfokuskan upaya mereka untuk mengidentifikasi pekerja mana yang memberikan kontribusi paling besar dan berupaya menyelesaikan masalah tersebut.

Memanfaatkan metrik dan data internal untuk mempersempit penyebabnya

WHOOP telah menyiapkan infrastruktur internal untuk memantau metrik WorkManager. Mereka memantau secara berkala:

  1. Rata-Rata Waktu Proses: Berapa lama pekerja berjalan?
  2. Waktu tunggu: Seberapa sering pekerja mengalami waktu tunggu, bukan menyelesaikan tugas?
  3. Percobaan ulang: Seberapa sering pekerja mencoba lagi jika pekerjaan kehabisan waktu atau gagal?
  4. Pembatalan: Seberapa sering pekerjaan dibatalkan?

Melacak lebih dari sekadar keberhasilan dan kegagalan pekerja memberi tim visibilitas ke dalam efisiensi pekerjaan mereka.

Metrik internal menandai runtime rata-rata yang tinggi untuk beberapa pekerja tertentu, sehingga mereka dapat mempersempit penyelidikan lebih lanjut. 

Selain metrik internal, tim juga menggunakan Background Task Inspector Android Studio untuk memeriksa dan men-debug pekerja yang relevan, dengan fokus khusus pada kunci aktif terkait, agar selaras dengan metrik yang ditandai di Android vitals.

Investigasi: Membedakan varian pekerja

WHOOP menggunakan penjadwalan sekali waktu dan berkala untuk beberapa pekerja. Hal ini memungkinkan aplikasi menggunakan kembali logika Pekerja yang sama untuk tugas identik dengan kriteria keberhasilan yang sama, yang hanya berbeda dalam waktu.

Dengan menggunakan metrik internal, mereka dapat mempersempit penelusuran ke pekerja tertentu, tetapi mereka tidak dapat mengetahui apakah bug terjadi saat pekerja bersifat satu kali, berkala, atau keduanya. Jadi, mereka meluncurkan update untuk menggunakan metode setTraceTag WorkManager guna membedakan antara varian satu kali dan berkala dari Worker yang sama.

Detail tambahan ini akan memungkinkan mereka mengidentifikasi secara pasti varian Pekerja mana (berkala atau satu kali) yang paling berkontribusi pada sesi dengan kunci wake parsial yang berlebihan. Namun, tim terkejut saat data mengungkapkan bahwa tidak ada varian yang tampaknya memberikan kontribusi lebih besar daripada varian lainnya.

Manmeet Tuteja, Android Engineer II di WHOOP mengatakan “pemisahan tersebut juga membantu kami mengonfirmasi bahwa masalah terjadi di kedua varian, yang mengarah dari konfigurasi penjadwalan dan ke masalah logika bisnis bersama di dalam penerapan pekerja”.

manmeet.png

Mempelajari lebih dalam perilaku pekerja dan memperbaiki akar masalah

Dengan pengetahuan bahwa mereka perlu melihat logika dalam pekerja,  tim memeriksa ulang perilaku pekerja untuk pekerja yang telah ditandai selama penyelidikan mereka. Secara khusus, mereka mencari instance yang mungkin mengalami masalah dan tidak dapat diselesaikan.

Semua ini berujung pada penemuan akar penyebab penguncian layar saat aktif yang berlebihan:

CoroutineWorker yang dirancang untuk menunggu koneksi ke sensor WHOOP sebelum melanjutkan. 

Jika pekerjaan dimulai tanpa sensor terhubung, whoopSensorFlow–yang menunjukkan apakah sensor terhubung– adalah nullSensorWorker tidak memperlakukan hal ini sebagai kondisi keluar lebih awal dan terus berjalan, sehingga menunggu koneksi tanpa batas waktu. Akibatnya, WorkManager menahan kunci aktif sebagian hingga pekerjaan mencapai batas waktu, sehingga menyebabkan penggunaan kunci aktif latar belakang yang tinggi dan penjadwalan ulang SensorWorker yang sering dan tidak diinginkan.

Untuk mengatasi hal ini, tim WHOOP memperbarui logika pekerja untuk memeriksa status koneksi sebelum mencoba menjalankan logika bisnis inti.

Jika sensor tidak tersedia, pekerja akan keluar, sehingga menghindari skenario waktu tunggu habis dan melepaskan kunci tetap aktif. Cuplikan kode berikut menunjukkan solusinya:

  class SensorWorker(appContext: Context, params: WorkerParameters): CoroutineWorker(appContext, params) {
   override suspend fun doWork(): Result {
      ...
      // Check the sensor state and perform work or return failure
       return whoopSensorFlow.replayCache
            .firstOrNull()
            ?.let { cachedData ->
                processSensorData(cachedData)
                Result.success()
            } ?: run {
                Result.failure()
            }
}

Mencapai penurunan 90% pada sesi dengan penguncian layar saat aktif parsial yang berlebihan

Setelah meluncurkan perbaikan, tim terus memantau dasbor Android vitals untuk mengonfirmasi dampak perubahan. 

Pada akhirnya, WHOOP melihat persentase kunci layanan bangun sebagian yang berlebihan turun dari 15% menjadi kurang dari 1% hanya 30 hari setelah menerapkan perubahan pada Worker mereka. 

partialWake.png

Sebagai hasil dari perubahan tersebut, tim melihat lebih sedikit instance pekerjaan yang mengalami waktu tunggu habis tanpa selesai, sehingga menghasilkan waktu proses rata-rata yang lebih rendah. 

Saran tim WHOOP kepada developer lain yang ingin meningkatkan efisiensi tugas latar belakang mereka:

sarthak.png

Mulai

Jika Anda tertarik untuk mencoba mengurangi penguncian layar saat aktif sebagian yang berlebihan di aplikasi atau mencoba meningkatkan efisiensi pekerja, lihat metrik penguncian layar saat aktif sebagian yang berlebihan di aplikasi Anda di Android vitals, dan tinjau dokumentasi penguncian layar saat aktif untuk mengetahui praktik terbaik dan strategi pen-debug-an lainnya. 

Ditulis oleh:

Lanjutkan membaca