Menyimpan Informasi Status Activity Saat Terjadi Perubahan Konfigurasi

Pada latihan sebelumnya kita sudah mengetahui bahwa ketika terjadi perubahan orientasi layar activity akan di-destroy dan kemudian di-recreate. Harap diingat bahwa ketika activity di-recreate, status saat itu bisa hilang. Ketika activity di-destroy, activity akan memicu salah satu atau kedua method berikut ini:
  • onPause() – Method ini akan selalu dipicu ketika activity di-destroy atau ketika didorong ke background.
  • onSaveInstanceState() – Method ini juga akan dipicu ketika activity akan di-destroy atau didorong ke background (sama seperti method ‘onPause()’). Tetapi, bedanya dengan method ‘onPause()’, method ‘onSaveInstanceState()’ tidak dipicu saat activity dipindahkan dari tumpukan (misalnya ketika user menekan tombol ‘back’), karena tidak ada keperluan untuk me-muat ulang status-nya saat diaktifkan lagi ke depan layar.
Ringkasnya, untuk mempertahankan status activity, kita bisa selalu mengimplementasikan method ‘onPause()’ dan kemudian menggunakan teknik kita sendiri untuk menyimpan status activity kita, misalnya dengan menggunakan databse, storage internal atau external, dan seterusnya.

Bila kita hanya ingin menyimpan status activity sehingga bisa diambil lagi saat activity di-recreate (misalnya saat ada perubahan orientasi perangkat), cara yang paling gampang adalah dengan mengimplementasikan method ‘onSaveInstanceState()’, karena method ini menyediakan object ‘Bundle’ sebagai argumen sehingga kita bisa menggunakannya untuk menyimpan staus activity kita. Kode berikut akan menunjukkan bahwa kita bisa menyimpan string ID ke object ‘Bundle’ dengan menggunakan method ‘onSaveInstanceState()’:
@Override
public void onSaveInstanceState(Bundle simpanStatus) {
/*menyimpan apapun yang kita perlu simpan*/
simpanStatus.putString("ID", "9876543210");
super.onSaveInstanceState(simpanStatus);
}
Ketika activity di-recreate, method ‘onCreate()’ akan dipicu terlebih dahulu, kemudian diikuti dengan method ‘onRestoreInstanceState()’, yang memungkinkan kita untuk mengambil status yang sudah tersimpan sebelumnya di dalam method ‘onSaveInstanceState()’ melalui object ‘Bundle’ di dalam argumennya:
@Override
public void onRestoreInstanceState(Bundle ambilStatus) {
super.onRestoreInstanceState(ambilStatus);
/*mengambil status yang sudah disimpan*/
String ID = ambilStatus.getString("ID");
Meskipun kita bisa menggunakan method ‘onSaveInstanceState()’ untuk menyimpan status, jangan lupa batasan bahwa kita hanya bisa menyimpan status di object ‘Bundle’. Bila kita ingin menyipan struktur data yang lebih kompleks, kita tidak bisa menggunakan cara ini.

Catatan:
Perubahan orientasi layar adalah bagian dari perubahan konfigurasi. Contoh perubahan konfigurasi lainnya adalah kemunculan keyboard, dsb. Perubahan konfigurasi akan membuat activity di-destroy.

No comments: