Panduan

Penerapan Kualitas Teknis Baterai Hadir: Cara Mengoptimalkan Kasus Penggunaan Penguncian Layar Saat Aktif Umum

8 menit untuk dibaca
Lihat profil Alice Yuan
Alice Yuan Developer Relations Engineer, Android

Menyadari bahwa pengurasan baterai yang berlebihan menjadi perhatian utama pengguna Android, Google telah mengambil langkah-langkah signifikan untuk membantu developer membuat aplikasi yang lebih hemat daya. Pada 1 Maret 2026, Google Play Store mulai meluncurkan perlakuan kualitas teknis penguncian layar saat aktif untuk meningkatkan pengurasan baterai. Perlakuan ini akan diluncurkan secara bertahap ke aplikasi yang terpengaruh selama beberapa minggu ke depan. Aplikasi yang secara konsisten melebihi batas "Penguncian Layar Saat Aktif Parsial yang Berlebihan" di Android vitals dapat melihat dampak nyata pada kehadiran mereka di Play Store, termasuk peringatan di listingan Google Play Store dan pengecualian dari platform penemuan seperti rekomendasi.

appDetails.png

Pengguna mungkin melihat peringatan di listingan Google Play Store Anda jika aplikasi Anda melebihi batas perilaku buruk. 

Inisiatif ini meningkatkan efisiensi baterai menjadi metrik vital inti bersama metrik stabilitas seperti error dan ANR. "Batas perilaku buruk" didefinisikan sebagai menahan penguncian layar saat aktif parsial yang tidak dikecualikan selama rata-rata minimal dua jam saat layar nonaktif di lebih dari 5% sesi pengguna dalam 28 hari terakhir. Penguncian layar saat aktif dikecualikan jika merupakan penguncian layar saat aktif yang ditahan sistem yang menawarkan manfaat pengguna yang jelas yang tidak dapat dioptimalkan lebih lanjut, seperti pemutaran audio, akses lokasi, atau transfer data yang dimulai oleh pengguna. Anda dapat melihat definisi lengkap penguncian layar saat aktif yang berlebihan di dokumentasi Android vitals kami.

Sebagai bagian dari inisiatif berkelanjutan kami untuk meningkatkan masa pakai baterai di seluruh ekosistem Android, kami telah menganalisis ribuan aplikasi dan cara mereka menggunakan penguncian layar saat aktif parsial. Meskipun penguncian layar saat aktif terkadang diperlukan, kami sering melihat aplikasi menahannya secara tidak efisien atau tidak perlu, padahal ada solusi yang lebih efisien. Blog ini akan membahas skenario paling umum saat penguncian layar saat aktif yang berlebihan terjadi dan rekomendasi kami untuk mengoptimalkan penguncian layar saat aktif.Kami telah melihat kesuksesan yang terukur dari partner seperti WHOOP, yang memanfaatkan rekomendasi ini untuk mengoptimalkan perilaku latar belakang mereka.

Menggunakan layanan latar depan vs penguncian layar saat aktif parsial

Kami sering melihat developer kesulitan memahami perbedaan antara dua konsep saat melakukan eksekusi latar belakang: layanan latar depan dan penguncian layar saat aktif parsial.

Layanan latar depan adalah API siklus proses yang memberi sinyal kepada sistem bahwa aplikasi melakukan pekerjaan yang dapat dirasakan pengguna dan tidak boleh dihentikan untuk mengklaim kembali memori, tetapi tidak secara otomatis mencegah CPU tidur saat layar nonaktif. Sebaliknya, penguncian layar saat aktif parsial adalah mekanisme yang secara khusus dirancang untuk menjaga CPU tetap berjalan meskipun layar nonaktif. 

Meskipun layanan latar depan sering kali diperlukan untuk melanjutkan tindakan pengguna, perolehan manual penguncian layar saat aktif parsial hanya diperlukan bersama dengan layanan latar depan selama durasi aktivitas CPU. Selain itu, Anda tidak perlu menggunakan penguncian layar saat aktif jika sudah menggunakan API yang membuat perangkat tetap aktif. 

Lihat diagram alur di Memilih API yang tepat untuk membuat perangkat tetap aktif untuk memastikan Anda memiliki pemahaman yang kuat tentang alat yang akan digunakan untuk menghindari perolehan penguncian layar saat aktif dalam skenario yang tidak diperlukan.

Library pihak ketiga yang memperoleh penguncian layar saat aktif

Aplikasi biasanya menemukan bahwa aplikasi tersebut ditandai untuk penguncian layar saat aktif yang berlebihan yang ditahan oleh SDK pihak ketiga atau API sistem yang bertindak atas namanya. Untuk mengidentifikasi dan mengatasi penguncian layar saat aktif ini, sebaiknya ikuti langkah-langkah berikut:

  • Periksa Android vitals: Temukan nama persis penguncian layar saat aktif yang bermasalah di dasbor penguncian layar saat aktif parsial yang berlebihan. Bandingkan nama ini dengan panduan Mengidentifikasi penguncian layar saat aktif yang dibuat oleh API lain untuk melihat apakah penguncian layar saat aktif tersebut dibuat oleh API sistem atau library Jetpack yang dikenal. Jika ya, Anda mungkin perlu mengoptimalkan penggunaan API dan dapat melihat panduan yang direkomendasikan.
  • Ambil Pelacakan Sistem: Jika penguncian layar saat aktif tidak dapat diidentifikasi dengan mudah, buat ulang masalah penguncian layar saat aktif secara lokal menggunakan pelacakan sistem dan periksa dengan UI Perfetto. Anda dapat mempelajari lebih lanjut cara melakukannya di Men-debug jenis penguncian layar saat aktif yang berlebihan lainnya bagian dari postingan blog ini.
  • Evaluasi Alternatif: Jika library pihak ketiga yang tidak efisien bertanggung jawab dan tidak dapat dikonfigurasi untuk menghormati masa pakai baterai, pertimbangkan untuk mengomunikasikan masalah tersebut dengan pemilik SDK, menemukan SDK alternatif, atau membuat fungsi secara internal.

Skenario penguncian layar saat aktif umum

Di bawah ini adalah rincian beberapa kasus penggunaan tertentu yang telah kami tinjau, beserta jalur yang direkomendasikan untuk mengoptimalkan penerapan penguncian layar saat aktif.

Upload atau Download yang Dimulai Pengguna

Contoh kasus penggunaan:

  • Aplikasi streaming video tempat pengguna memicu download file besar untuk akses offline.
  • Aplikasi pencadangan media tempat pengguna memicu upload foto terbaru mereka melalui perintah notifikasi.

Cara mengurangi penguncian layar saat aktif: 

  • Jangan dapatkan penguncian layar saat aktif manual. Sebagai gantinya, gunakan User-Initiated Data Transfer (UIDT) API. Ini adalah jalur yang ditetapkan untuk tugas transfer data yang berjalan lama yang dimulai oleh pengguna, dan dikecualikan dari perhitungan penguncian layar saat aktif yang berlebihan.

Sinkronisasi Latar Belakang Satu Kali atau Berkala

Contoh kasus penggunaan:

  • Aplikasi melakukan sinkronisasi latar belakang berkala untuk mengambil data untuk akses offline. 
  • Aplikasi pedometer yang mengambil jumlah langkah secara berkala.

Cara mengurangi penguncian layar saat aktif:

  • Jangan dapatkan penguncian layar saat aktif manual. Gunakan WorkManager yang dikonfigurasi untuk pekerjaan satu kali atau berkala. WorkManager menghormati kesehatan sistem dengan mengelompokkan tugas dan memiliki interval berkala minimum (15 menit), yang umumnya cukup untuk pembaruan latar belakang. 
  • Jika Anda mengidentifikasi penguncian layar saat aktif yang dibuat oleh WorkManager atau JobScheduler dengan penggunaan penguncian layar saat aktif yang tinggi, hal ini mungkin karena Anda salah mengonfigurasi pekerja agar tidak selesai dalam skenario tertentu. Pertimbangkan untuk menganalisis alasan penghentian pekerja, terutama jika Anda melihat kemunculan STOP_REASON_TIMEOUT yang tinggi. 
workManager.getWorkInfoByIdFlow(syncWorker.id)
  .collect { workInfo ->
      if (workInfo != null) {
        val stopReason = workInfo.stopReason
        logStopReason(syncWorker.id, stopReason)
      }
  }
  • Selain mencatat alasan penghentian pekerja, lihat dokumentasi kami tentang men-debug pekerja Anda. Selain itu, pertimbangkan untuk mengumpulkan dan menganalisis pelacakan sistem untuk memahami kapan penguncian layar saat aktif diperoleh dan dilepaskan.
  • Terakhir, lihat studi kasus kami dengan WHOOP, tempat mereka dapat menemukan masalah dengan konfigurasi pekerja dan mengurangi dampak penguncian layar saat aktif secara signifikan.

Komunikasi Bluetooth

Contoh kasus penggunaan:

  • Aplikasi perangkat pendamping meminta pengguna untuk memasangkan perangkat eksternal Bluetooth mereka.
  • Aplikasi perangkat pendamping mendengarkan peristiwa hardware di perangkat eksternal dan perubahan yang terlihat pengguna dalam notifikasi.
  • Pengguna aplikasi perangkat pendamping memulai transfer file antara perangkat seluler dan Bluetooth.
  • Aplikasi perangkat pendamping melakukan pembaruan firmware sesekali ke perangkat eksternal melalui Bluetooth.

Cara mengurangi penguncian layar saat aktif:

  • Gunakan pemasangan perangkat pendamping untuk memasangkan perangkat Bluetooth guna menghindari perolehan penguncian layar saat aktif manual selama pemasangan Bluetooth. 
  • Lihat panduan Berkomunikasi di latar belakang untuk memahami cara melakukan komunikasi Bluetooth latar belakang. 
  • Penggunaan WorkManager sering kali cukup jika tidak ada dampak pengguna pada komunikasi yang tertunda. Jika penguncian layar saat aktif manual dianggap perlu, tahan penguncian layar saat aktif hanya selama durasi aktivitas Bluetooth atau pemrosesan data aktivitas.

Pelacakan Lokasi

Contoh kasus penggunaan:

  • Aplikasi kebugaran yang meng-cache data lokasi untuk diupload nanti, seperti membuat rute lari
  • Aplikasi pengiriman makanan yang mengambil data lokasi dengan frekuensi tinggi untuk memperbarui progres pengiriman di UI notifikasi atau widget.

Cara mengurangi penguncian layar saat aktif:

  • Lihat panduan kami untuk Mengoptimalkan penggunaan lokasi. Pertimbangkan untuk menerapkan waktu tunggu, memanfaatkan pengelompokan permintaan lokasi, atau menggunakan pembaruan lokasi pasif untuk memastikan efisiensi baterai.
  • Saat meminta pembaruan lokasi menggunakan FusedLocationProvider atau LocationManager API, sistem akan otomatis memicu aktivasi perangkat selama callback peristiwa lokasi. Penguncian layar saat aktif yang singkat dan dikelola sistem ini dikecualikan dari perhitungan penguncian layar saat aktif parsial yang berlebihan.
  • Hindari perolehan penguncian layar saat aktif yang terpisah dan berkelanjutan untuk data lokasi caching, karena hal ini berlebihan. Sebagai gantinya, pertahankan peristiwa lokasi dalam memori atau penyimpanan lokal dan manfaatkan WorkManager untuk memprosesnya pada interval berkala.
override fun onCreate(savedInstanceState: Bundle?) {
    locationCallback = object : LocationCallback() {
        override fun onLocationResult(locationResult: LocationResult?) {
            locationResult ?: return
            // System wakes up CPU for short duration
            for (location in locationResult.locations){
                // Store data in memory to process at another time
            }
        }
    }
}

Pemantauan Sensor Frekuensi Tinggi

Contoh kasus penggunaan:

  • Aplikasi pedometer yang secara pasif mengumpulkan langkah, atau jarak yang ditempuh. 
  • Aplikasi keselamatan yang memantau sensor perangkat untuk perubahan cepat secara real time, guna menyediakan fitur seperti deteksi error atau deteksi jatuh.

Cara mengurangi penguncian layar saat aktif:

  • Jika menggunakan SensorManager, kurangi penggunaan ke interval berkala dan hanya jika pengguna telah secara eksplisit memberikan akses melalui interaksi UI. Pemantauan sensor frekuensi tinggi dapat menguras baterai secara signifikan karena jumlah aktivasi dan pemrosesan CPU yang terjadi.
  • Jika Anda melacak jumlah langkah atau jarak yang ditempuh, bukan menggunakan SensorManager, manfaatkan Recording API atau pertimbangkan untuk menggunakan Health Connect untuk mengakses jumlah langkah perangkat historis dan gabungan guna mengambil data dengan cara yang hemat baterai.
  • Jika Anda mendaftarkan sensor dengan SensorManager, tentukan maxReportLatencyUs 30 detik atau lebih untuk memanfaatkan pengelompokan sensor guna meminimalkan frekuensi interupsi CPU. Saat perangkat kemudian diaktifkan oleh pemicu lain seperti interaksi pengguna, pengambilan lokasi, atau tugas terjadwal, sistem akan segera mengirimkan data sensor yang di-cache.
val accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)

sensorManager.registerListener(this,
                 accelerometer,
                 samplingPeriodUs, // How often to sample data
                 maxReportLatencyUs // Key for sensor batching 
              )
  • Jika aplikasi Anda memerlukan data lokasi dan sensor, sinkronkan pengambilan dan pemrosesan peristiwa. Dengan menggabungkan pembacaan sensor ke penguncian layar saat aktif singkat yang ditahan sistem untuk pembaruan lokasi, Anda tidak memerlukan penguncian layar saat aktif untuk membuat CPU tetap aktif. Gunakan pekerja atau penguncian layar saat aktif berdurasi singkat untuk menangani upload dan pemrosesan data gabungan ini.

Pengiriman Pesan Jarak Jauh

Contoh kasus penggunaan:

  • Aplikasi pendamping pemantauan video atau suara yang perlu memantau peristiwa yang terjadi di perangkat eksternal yang terhubung menggunakan jaringan lokal.
  • Aplikasi pesan yang mempertahankan koneksi soket jaringan dengan varian desktop.

Cara mengurangi penguncian layar saat aktif:

  • Jika peristiwa jaringan dapat diproses di sisi server, gunakan FCM untuk menerima informasi di klien. Anda dapat memilih untuk menjadwalkan pekerja yang dipercepat jika pemrosesan data FCM tambahan diperlukan. 
  • Jika peristiwa harus diproses di sisi klien melalui koneksi soket, penguncian layar saat aktif tidak diperlukan untuk mendengarkan interupsi peristiwa. Saat paket data tiba di radio Wi-Fi atau Seluler, hardware radio akan memicu interupsi hardware dalam bentuk penguncian layar saat aktif kernel. Kemudian, Anda dapat memilih untuk menjadwalkan pekerja atau mendapatkan penguncian layar saat aktif untuk memproses data.
  • Misalnya, jika Anda menggunakan ktor-network untuk mendengarkan paket data di soket jaringan, Anda hanya boleh mendapatkan penguncian layar saat aktif jika paket telah dikirim ke klien dan perlu diproses.
val readChannel = socket.openReadChannel()
while (!readChannel.isClosedForRead) {
    // CPU can safely sleep here while waiting for the next packet
    val packet = readChannel.readRemaining(1024) 
    if (!packet.isEmpty) {
         // Data Arrived: The system woke the CPU and we should keep it awake via manual wake lock (urgent) or scheduling a worker (non-urgent)
         performWorkWithWakeLock { 
              val data = packet.readBytes()
              // Additional logic to process data packets
         }
    }
}

Ringkasan

Dengan mengadopsi solusi yang direkomendasikan ini untuk kasus penggunaan umum seperti sinkronisasi latar belakang, pelacakan lokasi, pemantauan sensor, dan komunikasi jaringan, developer dapat berupaya mengurangi penggunaan penguncian layar saat aktif yang tidak perlu. Untuk terus belajar, baca postingan blog teknis kami lainnya atau tonton video teknis kami tentang cara menemukan dan men-debug penguncian layar saat aktif: Mengoptimalkan baterai aplikasi menggunakan metrik penguncian layar saat aktif Android vitals. Selain itu, lihat dokumentasi penguncian layar saat aktif kami yang telah diperbarui. Untuk membantu kami terus meningkatkan kualitas referensi teknis, harap bagikan masukan tambahan tentang panduan kami dalam survei masukan dokumentasi.

Ditulis oleh:
Lanjutkan membaca