Agar baterai tidak habis, perangkat Android yang tidak ada aktivitas dalam waktu singkat akan tidur. Namun, ada kalanya aplikasi perlu mengaktifkan layar atau CPU dan menjaganya tetap aktif guna menyelesaikan beberapa tugas.
Pendekatan yang Anda ambil bergantung pada kebutuhan aplikasi. Namun, aturan praktis umumnya adalah Anda harus menggunakan pendekatan yang paling ringan untuk aplikasi Anda, untuk meminimalkan dampak aplikasi terhadap resource sistem. Bagian berikut menjelaskan cara menangani kasus saat perilaku tidur default perangkat tidak kompatibel dengan persyaratan aplikasi Anda.
Cara alternatif untuk menggunakan fitur penguncian layar saat aktif
Sebelum menambahkan dukungan penguncian layar saat aktif ke aplikasi, pertimbangkan apakah kasus penggunaan aplikasi mendukung salah satu solusi alternatif berikut:
Jika aplikasi Anda melakukan download HTTP yang berjalan lama, sebaiknya gunakan
DownloadManager
.Jika aplikasi Anda menyinkronkan data dari server eksternal, pertimbangkan untuk membuat adaptor sinkronisasi.
Jika aplikasi Anda mengandalkan layanan latar belakang, pertimbangkan untuk menggunakan JobScheduler atau Firebase Cloud Messaging untuk memicu layanan ini pada interval tertentu.
Jika Anda ingin aplikasi pendamping tetap berjalan setiap kali perangkat pendamping berada dalam jangkauan, gunakan Pengelola Perangkat Pendamping.
Menjaga layar agar tetap aktif
Aplikasi tertentu harus menjaga layar agar tetap aktif, seperti aplikasi film atau game. Cara
terbaik untuk melakukannya adalah dengan menggunakan
FLAG_KEEP_SCREEN_ON
dalam aktivitas Anda (dan hanya dalam aktivitas, tidak pernah dalam layanan atau komponen
aplikasi lainnya). Contoh:
Kotlin
class MainActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) } }
Java
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } }
Keuntungan dari pendekatan ini adalah tidak seperti penguncian layar saat aktif (dibahas dalam Menjaga CPU Aktif), pendekatan ini tidak memerlukan izin khusus, dan platform mengelola perpindahan pengguna antar-aplikasi dengan benar, tanpa aplikasi Anda perlu mengkhawatirkan melepaskan resource yang tidak digunakan.
Cara lain untuk menerapkannya adalah dalam file XML tata letak aplikasi Anda, dengan menggunakan
atribut android:keepScreenOn
:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:keepScreenOn="true"> ... </RelativeLayout>
Menggunakan android:keepScreenOn="true"
sama dengan menggunakan
FLAG_KEEP_SCREEN_ON
.
Anda dapat menggunakan pendekatan mana pun yang terbaik untuk aplikasi Anda. Keuntungan menyetel flag secara terprogram dalam aktivitas adalah Anda akan memiliki opsi untuk menghapus flag secara terprogram nanti sehingga memungkinkan layar nonaktif.
Mode Standby untuk TV
Di TV,
FLAG_KEEP_SCREEN_ON
harus digunakan untuk mencegah perangkat masuk ke
Mode Standby
selama pemutaran video aktif. Jika FLAG_KEEP_SCREEN_ON
tidak ditetapkan
oleh aktivitas latar depan, perangkat akan otomatis memasuki Mode Standby
setelah periode tidak aktif.
Menjaga CPU agar tetap aktif
Jika perlu menjaga CPU tetap berjalan untuk menyelesaikan beberapa tugas sebelum
perangkat beralih ke mode tidur, Anda dapat menggunakan
fitur layanan sistem
PowerManager
yang disebut penguncian layar saat aktif. Penguncian layar saat aktif memungkinkan aplikasi mengontrol status daya
perangkat host.
Membuat dan menyimpan penguncian layar saat aktif dapat memiliki dampak yang besar terhadap masa pakai
baterai perangkat host. Oleh karena itu, sebaiknya gunakan penguncian layar saat aktif hanya jika benar-benar diperlukan dan
pegang kunci layar ini dalam waktu sesingkat mungkin. Misalnya, Anda tidak perlu
menggunakan penguncian layar saat aktif dalam aktivitas. Seperti yang dijelaskan di atas, jika Anda ingin agar
layar tetap aktif dalam aktivitas Anda, gunakan
FLAG_KEEP_SCREEN_ON
.
Salah satu kasus yang sah untuk menggunakan penguncian layar saat aktif mungkin adalah layanan latar belakang yang perlu mengambil penguncian layar saat aktif agar CPU tetap berjalan agar dapat melakukan pekerjaan saat layar nonaktif. Sekali lagi, praktik ini harus diminimalkan karena dampaknya terhadap masa pakai baterai.
Untuk menggunakan penguncian layar saat aktif, langkah pertama adalah menambahkan
izin WAKE_LOCK
ke
file manifes aplikasi:
<uses-permission android:name="android.permission.WAKE_LOCK" />
Jika aplikasi Anda menyertakan penerima siaran yang menggunakan layanan untuk melakukan beberapa pekerjaan, berikut cara menyetel penguncian layar saat aktif secara langsung:
Kotlin
val wakeLock: PowerManager.WakeLock = (getSystemService(Context.POWER_SERVICE) as PowerManager).run { newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyApp::MyWakelockTag").apply { acquire() } }
Java
PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE); WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyApp::MyWakelockTag"); wakeLock.acquire();
Untuk melepaskan penguncian layar saat aktif, panggil
wakelock.release()
.
Tindakan ini akan melepaskan klaim Anda terhadap CPU. Penting untuk melepaskan penguncian layar saat aktif segera
setelah aplikasi selesai menggunakannya agar baterai tidak habis.