Menjaga perangkat tetap aktif

Agar baterai tidak habis, perangkat Android yang tidak ada aktivitas akan segera jatuh tertidur. Namun, ada kalanya aplikasi perlu mengaktifkan layar atau CPU dan menjaganya tetap aktif untuk menyelesaikan beberapa pekerjaan.

Pendekatan yang Anda ambil bergantung pada kebutuhan aplikasi. Namun, aturan umum praktisnya adalah Anda harus menggunakan pendekatan yang paling ringan untuk untuk meminimalkan dampak aplikasi terhadap resource sistem. Bagian berikut menjelaskan cara menangani kasus saat perilaku tidur default perangkat sehingga 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 penggunaan aplikasi yang sesuai mendukung salah satu solusi alternatif berikut:

  • Jika aplikasi Anda menjalankan download HTTP yang berjalan lama, pertimbangkan untuk menggunakan DownloadManager

  • Jika aplikasi Anda menyinkronkan data dari server eksternal, pertimbangkan untuk membuat adaptor sinkronisasi.

  • Jika aplikasi Anda mengandalkan layanan latar belakang, sebaiknya gunakan JobScheduler atau Firebase Cloud Messaging untuk memicu layanan ini pada interval tertentu.

  • Jika perlu tetap menjalankan aplikasi pendamping setiap kali perangkat pendamping dalam jangkauan, gunakan Pengelola Perangkat Pendamping.

Menjaga layar agar tetap aktif

Aplikasi tertentu harus menjaga layar agar tetap aktif, seperti aplikasi film atau game. Tujuan cara terbaik untuk melakukannya adalah dengan menggunakan FLAG_KEEP_SCREEN_ON dalam aktivitas Anda (dan hanya dalam aktivitas, tidak pernah dalam layanan atau aplikasi lain ). 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 pendekatan ini adalah tidak seperti penguncian layar saat aktif (dibahas di Menjaga CPU Aktif), tanpa memerlukan izin khusus, dan platform dengan benar mengelola pengguna yang berpindah antar-aplikasi, tanpa memerlukan aplikasi Anda perlu khawatir melepaskan sumber daya yang tidak digunakan.

Cara lain untuk mengimplementasikannya adalah di 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 menetapkan penanda secara terprogram dalam aktivitas Anda adalah memberi opsi untuk menghapus penanda secara terprogram sehingga kemudian memungkinkan layar untuk berganti nonaktif.

Mode Standby untuk TV

Di TV, FLAG_KEEP_SCREEN_ON harus digunakan untuk mencegah perangkat masuk ke dalam Mode Standby selama pemutaran video aktif. Jika FLAG_KEEP_SCREEN_ON tidak ditetapkan oleh aktivitas latar depan, perangkat akan otomatis memasuki Mode Standby setelah tidak aktif selama beberapa waktu.

Menjaga CPU agar tetap aktif

Jika Anda perlu menjaga CPU tetap berjalan untuk menyelesaikan beberapa pekerjaan 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 dari perangkat host.

Membuat dan menahan penguncian layar saat aktif dapat berdampak besar pada fungsi perangkat host daya tahan baterai. Karena itu, sebaiknya gunakan penguncian layar saat aktif hanya jika benar-benar diperlukan dan tahan mereka untuk waktu yang sesingkat mungkin. Misalnya, Anda tidak perlu menggunakan penguncian layar saat aktif dalam aktivitas. Seperti yang dijelaskan di atas, jika Anda ingin mempertahankan aktif di aktivitas Anda, gunakan FLAG_KEEP_SCREEN_ON

Salah satu kasus yang sah untuk menggunakan penguncian layar saat aktif adalah layanan latar belakang yang perlu mengambil penguncian layar saat aktif untuk menjaga CPU tetap berjalan agar dapat melakukan pekerjaan saat layar nonaktif. Sekali lagi, praktik ini harus diminimalkan karena dampaknya pada daya tahan baterai.

Untuk menggunakan penguncian layar saat aktif, langkah pertama adalah menambahkan WAKE_LOCK untuk file manifes aplikasi Anda:

<uses-permission android:name="android.permission.WAKE_LOCK" />

Jika aplikasi Anda menyertakan penerima siaran yang menggunakan layanan untuk melakukan beberapa pekerjaan, berikut adalah cara Anda mengatur 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() Ini melepaskan klaim Anda terhadap CPU. Penting untuk melepaskan penguncian layar saat aktif karena segera setelah aplikasi Anda selesai menggunakannya untuk menghindari kehabisan baterai.