Catatan pengembang

Sudah 2026, tetapi membuat aplikasi tidur berbunyi semalaman masih sangat sulit

Saya ingin ponsel mengeluarkan suara kipas sampai pagi. Pada 2026, rasanya masalah itu sudah cukup teratasi. Ternyata masalah ini menghabiskan banyak waktu saya sebagai pengembang.

Bertahun-tahun saya memakai White Noise Lite. Ada iklan dan antarmuka yang terasa kuno, tetapi biasanya berfungsi. Lalu suaranya mulai sering berhenti. Saya menganggapnya crash, meski tak punya log untuk mengetahui penyebabnya. Saya juga ingin antarmuka modern dan suara yang dihasilkan di perangkat, bukan rekaman, dengan pengaturan presisi. Akhirnya saya membuat Veil dan jauh lebih memahami masalah keandalan.

Di iOS, pemutaran latar belakang relatif mudah dan menurut pengalaman saya Veil sangat stabil sejak awal. Android membutuhkan lebih banyak pekerjaan: beragam perangkat, ponsel lama dengan memori kecil, pengelolaan baterai produsen, dan pembaruan saat mendengarkan. Kode saya sendiri juga bermasalah. Bagi orang yang terbangun pukul tiga pagi, bedanya tidak terlalu penting.

Laporan crash saja tak cukup. Proses yang dimatikan mungkin tidak melaporkan pengecualian; proses hidup bisa punya aliran audio senyap. Layanan latar depan dan notifikasi pemutaran pun tidak membuktikan pengeras suara berbunyi. Saya menambahkan jurnal pemutaran native, informasi keluarnya proses, pengukuran memori, status layanan, kejadian audio, dan catatan penghentian disengaja. Bukti terkait bertahan setelah proses berakhir dan dikumpulkan pada pembukaan berikutnya.

Saya ingin merekonstruksi malam agar bisa membedakan kemungkinan penyebab. Apakah pemutaran masih diinginkan? Timer selesai? Memori bertambah? Ponsel diisi daya? Android mengganti paket? Tambahan sinyal berguna jika saya memahami batas maknanya.

Pengukuran sendiri harus diperbaiki dulu. Menggeser Veil dari aplikasi terbaru bisa menghentikan suara tanpa menutup sesi tercatat. Android membersihkan proses tersimpan beberapa jam kemudian dan laporan menghitungnya sebagai kegagalan pemutaran. Penghentian sengaja di pagi hari menjadi “penghentian semalaman”. Sebaliknya, pembaruan yang benar-benar memutus audio dikecualikan sebagai keluarnya proses yang wajar.

Perbaikan definisi mengubah gambaran kegagalan sebelum perbaikan audio berikutnya. Kini saya membedakan pemutaran yang membaik dari pengukuran yang membaik. Saya rutin meninjau versi, keluarga perangkat, durasi sesi, dan alasan keluar, tanpa perangkat uji serta laporan ganda. Keterlambatan laporan juga penting: beberapa sesi singkat tidak membuktikan versi baru bertahan semalaman.

Pola itu mengarahkan pengujian. Saya menjalankan tes panjang dan semalaman di ponsel fisik serta lab jarak jauh Samsung, dengan logcat terus-menerus, sampel memori dan tekanan memori, serta rekaman status audio dan layanan saat gagal. Bukti dikumpulkan tanpa saya harus menyaksikan gangguan langsung.

Pengujian bisa memengaruhi hasil. USB memberi daya, jadi bukan tes baterai tanpa pengisi daya. Menjalankan dumpsys meminfo berulang bahkan bisa mengganggu audio. Satu malam bersih hanya membuktikan saya belum mereproduksi kegagalan pada kondisi itu, bukan semua perangkat dan keadaan sistem aman.

Temuan anehnya adalah Android Auto Backup. Di Pixel saya, log menunjukkan BackupManager mematikan Veil selama pencadangan saat audio masih berbunyi. Dalam data instalasi, saya menemukan 190 SIGKILL proses terlindungi pada 93 instalasi, dari 14 Agustus sampai 11 September 2026, sering berulang sekitar tiga hari. Polanya mendukung hipotesis pencadangan tanpa membuktikan setiap kasus.

Saya menonaktifkan Auto Backup dan menerima keterbatasan pemulihan dari cloud. Dokumentasi Android menyebut pencadangan menghentikan aplikasi, biasanya mengecualikan aplikasi latar depan. Rekaman perangkat membuat kasus khusus ini bisa ditindaklanjuti. Dokumentasi pencadangan Android

Masalah lain ada di kode saya. Pemulihan audio bisa membangun konteks baru sebelum yang lama tertutup, menumpuk sumber daya saat aplikasi bermasalah. Kini penutupan ditunggu dengan batas waktu, dan pemulihan dijalankan berurutan dengan operasi pemutaran. Niat pengguna terbaru harus dihormati: perbaikan yang mengantre tidak boleh membatalkan tombol berhenti.

Satu upaya perbaikan menimbulkan kegagalan baru. Pemeriksaan 150 ms menguji apakah jam konteks audio maju, menemukan konteks macet yang mengaku aktif. Namun pemeriksaan menunggu timer JavaScript. Di latar belakang, penantian bisa macet sampai aplikasi kembali ke depan. Kini pemeriksaan hanya berjalan di latar depan. Jalur pemulihan juga perlu diuji dengan layar mati.

Beberapa perubahan penting adalah keputusan produk. Pengukuran menunjukkan sekitar 90 MB tambahan memori residen terkait proses WebView iklan. Penyelidikan sebelumnya juga menemukan kegagalan memori serius terkait SDK. Awalnya saya membatasi bebannya, lalu menghapus iklan dan SDK sepenuhnya. Untuk aplikasi semalaman, keandalan lebih penting.

Telemetri belum menjawab apakah orangnya mengharapkan penghentian. Setelah gangguan yang relevan, Veil dapat menampilkan kartu berisi waktu dan bertanya “Apakah ini sesuai perkiraanmu?”. Pilihan kata disengaja. “Kamu yang menghentikannya?” tidak mencakup pasangan yang menghentikan atau gangguan yang diperkirakan tanpa tindakan sendiri.

Penghentian yang diharapkan tidak diarahkan ke pemecahan masalah baterai. Jika tidak, aplikasi mengakui gangguan dan menawarkan panduan berdasarkan bukti. Jawabannya menjelaskan pengalaman, bukan mengklaim penyebab teknis. Pengguna baru Android juga tidak langsung disambut izin menakutkan dan perburuan pengaturan baterai.

Pengaturan itu sulit bagi kedua pihak. Saya bisa membukanya atau meminta pengecualian jika tepat, tetapi pengguna memutuskan. Pengecualian Android tidak mengendalikan semua pembersihan produsen. Langkah konkret setelah masalah lebih berguna daripada pengaturan asing sebelum suara pertama. Panduan pengelolaan daya Android

Pembaruan sangat membuat frustrasi. Saya bisa menunjukkan pembaruan otomatis per aplikasi di Play, tetapi Veil tidak mengontrolnya. Pembaruan manual menambah tugas; Google memberikan pengecualian untuk pembaruan keamanan kritis. Pembaruan untuk memperbaiki keandalan malam bisa justru memutus malam itu. Pengaturan pembaruan Google Play

Pemulihan otomatis setelah pembaruan masih belum selesai. Selain graf audio, status timer dan niat pengguna harus dipertahankan dengan benar. Beberapa pola khusus produsen perlu reproduksi lebih baik sebelum dapat dijelaskan dengan yakin. Aplikasi harus pulih dari kegagalan, bukan melawan penghentian disengaja.

Kemajuan terbesar datang dari gabungan analisis rutin, tes panjang, perbaikan khusus, dan masukan langsung. Masing-masing menangkap hal yang terlewat oleh lainnya. Saya kurang tertarik pada klaim aplikasi sedang berbunyi dan lebih tertarik pada buktinya. Orang yang menekan putar sebelum tidur seharusnya bisa percaya, meski mencapainya jauh lebih sulit dari perkiraan saya.

Butuh langkah praktis untuk ponselmu? Baca panduan pendamping: Mengatasi audio Android yang terhenti.