'Pause' dan 'Resume' suatu 'Activity'

Selama penggunaan app secara normal, app terkadang kehilangan fokus/tampilan utama, yang mengakibatkan 'activity' untuk 'pause'. Contohnya, ketika beberapa app berjalan pada 'multi-window mode', hanya salah satu dari app saja yang memiliki fokus/tampilan utama kapanpun; dan sistem akan mem-'pause' semua app yang lain. Demikian pula, ketika suatu 'activity' semi-transparent menjadi aktif (misalnya salah satu 'dialog'), 'activity' sebelumnya menjadi dalam status 'pause'. Sepanjang 'activity' tersebut masih terlihat sebagian tetapi saat ini bukan menjadi 'activity' yang sedang menjadi fokus atau sedang tampil di depan, dia tetap dalam status 'pause'.

Tetapi, setelah 'activity' benar-benar tidak ada dan tidak terlihat, dia berada dalam status 'stop' (yang akan di diskusikan dalam latihan berikutnya).

Ketika 'activity' kita masuk ke status 'pause', sistem akan memanggil method 'onPause()' pada 'Activity' kita, yang mengijinkan kita untuk menghentikan tindakan yang sedang berlangsung yang seharusnya tidak berlanjut jika sedang 'paused' atau menahan informasi apapun yang seharusnya disimpan secara permanen apabila user berlanjut keluar dari app kita. Bila user kembali ke 'activity' kita dari status 'pause', sistem akan kembali melanjutkannya dan memanggil method 'onResume()'.
Catatan:
Ketika sistem memanggil method onPause(), sistem mungkin akan memberi isyarat bahwa 'activity' akan di 'pause' untuk beberapa saat dan user mungkin akan mengembalikan fokus/tampilan utama ke 'activity' kita, atau bahwa app tersebut sedang berjalan pada 'multi-window mode'. Tetapi, pemanggilan method ini mungkin juga indikasi awal bahwa user sedang meninggalkan 'activity' kita.
Gambar 1: Ketika suatu 'activity' semi-transparent menghalangi 'activity' kita, sistem akan memanggil 'onPause()' dan 'activity' akan menunggu dengan status 'pause' (1). Bila user kembali ke 'activity' ketika sedang 'pause', sistem akan memanggil 'onResume()' (2).

Mem-'Pause' suatu 'Activity'

Ketika sistem memanggil 'onPause()' untuk 'activity' kita, secara teknis itu berarti 'activity' kita masih terlihat sebagian (biasanya masih terlihat di bagian atas layar), tetapi seringkali itu adalah indikasi bahwa user akan keluar dari 'activity' dan akan segera masuk ke status 'Stop'. Kita seharusnya menggunakan method 'onPause()' untuk:
  • Memeriksa apakah 'activity' sedang ada/terlihat atau tidak, jika tidak, hentikan animasi atau tindakan yang sedang berjalan lainnya yang menghabiskan/menggunakan CPU. Ingat, mulai dengan Android 7.0, app dalam status 'pause' mungkin sedang berjalan pada 'multi-window mode'. Dalam hal ini, kita mungkin tidak ingin menghentikan animasi atau playback video.
  • Melakukan perubahan-perubahan yang belum disimpan, tetapi hanya jika user mengharapkan bahwa perubahan-perubahan tersebut untuk disimpan secara permanen ketika user keluar (misalnya, suatu draft email).
  • Melepaskan 'resources' sistem, misalnya penerima 'broadcast', penangan ke sensor-sensor (seperti GPS), atau 'resources' apapun yang bisa mempengaruhi umur batere ketika 'activity' kita sedang dalam status 'pause' dan user tidak memerlukan 'resources' tersebut.
Contohnya, jika aplikasi kita menggunakan 'Camera', method 'onPause()' adalah tempat yang baik untuk melepaskannya.
@Override
public void onPause() {
    super.onPause();  // Always call the superclass method first

    // Release the Camera because we don't need it when paused
    // and other activities might need to use it.
    if (mCamera != null) {
        mCamera.release();
        mCamera = null;
    }
}
Secara umum, kita seharusnya tidak menggunakan 'onPause()' untuk menyimpan perubahan-perubahan user (misalnya informasi pribadi yang dimasukkan ke dalam suatu form) ke 'storage' permanen. Satu-satunya saat dimana kita seharusnya menyimpan perubahan user ke 'storage' saat 'onPause()' adalah ketika kita yakin user menginginkan perubahan tersebut untuk disimpan otomatis (misalnya ketika membuat draft email). Tetapi, kita seharusnya menghindari melakukan pekerjaan yang sangat intensif menghabiskan CPU selama 'onPause()', misalnya menulis ke database, karena hal itu bisa memperlambat perpindahan ke 'activity' berikutnya (sebaliknya kita seharusnya melakukan 'shutdown' pada 'activity' yang berat load-nya pada saat 'onStop()').

Kita seharusnya menjaga jumlah pekerjaan yang dilakukan di dalam method 'onPause()' relatif sedikit supaya proses transisi user ke app atau 'activity' berikutnya bisa berlangsung cepat bila 'activity' kita sedang dalam status 'stop'.
Catatan:
Ketika 'activity' kita sedang 'pause', instan 'Activity' tetap berada dalam memori dan akan dipanggil kembali ketika 'activity' dilanjutkan. Kita tidak perlu untuk menginisialisasi ulang komponen-komponen yang sudah dibuat pada saat method-method tersebut dipanggil hingga menuju ke status 'resume'.

Me-'Resume' suatu 'Activity'

Ketika user melanjutkan 'activity' kita dari status 'pause', sistem akan memanggil method 'onResume()'.

Perlu diketahui bahwa sistem akan memanggil method ini setiap kali 'activity' kita muncul ke layar utama, termasuk saat 'activity' dibuat pertama kali. Dengan demikian, kita seharusnya mengimplementasikan 'onResume()' untuk menginisialisasi komponen-komponen yang kita lepaskan pada saat 'onPause()' dan melakukan initialisasi apapun lainnya yang harus terjadi setiap kali 'activity' memasuki status 'resume' (misalnya memulai animasi dan menginisialisasi komponen-komponen yang hanya digunakan ketika 'activity' menjadi fokus/layar depan user).

Contoh dari 'onResume()' berikut adalah pasangan dari contoh 'onPause()' di atas, jadi menginisialisasi kamera yang di-lepaskan saat 'activity' berada dalam status 'pause'.
@Override
public void onResume() {
    super.onResume();  // Always call the superclass method first

    // Get the Camera instance as the activity achieves full user focus
    if (mCamera == null) {
        initializeCamera(); // Local method to handle camera init
    }
}

Latihan untuk dicoba:
Silahkan anda download souce code demo tentang siklus hidup 'activity' disini: Download Demo.
Catatan: Jalankan source code demo yang anda download dari link di atas, dengan Android Studio. Bila anda menemukan kode yang harus disesuaikan silahkan ubah dan sesuaikan sampai demo tersebut bisa anda jalankan dengan baik
.

referensi: https://developer.android.com/training/basics/activity-lifecycle/pausing.html
license: cc by

No comments: