Kamis, 09 Agustus 2018

Siklus Hidup Aktivitas dan Status Instance

    Siklus hidup aktivitas adalah serangkaian status tempat aktivitas mungkin berada sepanjang daur hidupnya, mulai dari saat aktivitas pertama dibuat hingga dihancurkan dan sistem mengklaim kembali sumber daya aktivitas tersebut. Saat pengguna menelusuri di antara aktivitas dalam aplikasi (di dalam dan di luar aplikasi juga), masing-masing aktivitas tersebut bertransisi di antara status yang berbeda dalam siklus hidup aktivitas.
    Setiap tahap dalam siklus hidup aktivitas memiliki metode callback yang cocok (onCreate(), onStart(), onPause(), dan lainnya). Saat sebuah aktivitas mengubah status, metode callback terkait akan dipanggil. Anda sudah melihat sala dari metode ini: onCreate(). Dengan mengganti metode callback siklus hidup dalam kelas aktivitas, Anda bisa mengubah perilaku default bagaimana aktivitas berperilaku untuk merespons pengguna atau tindakan sistem yang berbeda.

  1. Mengimplementasikan callback ke MainActivity
    1. Buka java/com.example.android.twoactivities/MainActivity.
    2. Dalam metode onCreate(), tambahkan pernyataan log berikut:
    3. Tambahkan metode baru untuk callback onStart(), dengan pernyataan ke log untuk peristiwa tersebut: TIPS: Pilih Code > Override Methods dalam Android Studio. Dialog muncul dengan semua metode yang mungkin dan bisa Anda gantikan dalam kelas. Memilih satu atau beberapa metode callback dari daftar menyisipkan template lengkap untuk metode tersebut, termasuk panggilan wajib ke superkelas.
    4. Gunakan metode onStart() sebagai template untuk mengimplementasikan callback siklus hidup lainnya:
      • onPause()
      • onRestart()
      • onResume()
      • onStop()
      • onDestroy()
    5. jalankan aplikasi Anda.

  2. Mengimplementasikan callback siklus hidup dalam SecondActivity
    1. Buka java/com.example.android.twoactivities/SecondActivity.
    2. Di bagian atas kelas, tambahkan konstanta untuk variabel LOG_TAG:
    3. Tambahkan callback siklus hidup dan pernyataan log ke aktivitas kedua. (Anda juga bisa menyalin dan menempel metode callback dari MainActivity)
    4. Tambahkan pernyataan log ke metode returnReply(), tepat sebelum metode finish():

  3. Amati log saat aplikasi berjalan
    1. Jalankan aplikasi twoactivity
    2. Klik Android Monitor di bawah Android Studio untuk membuka Android Monitor.
    3. Pilih tab logcat.
    4. Ketik "Activity" dalam kotak pencarian Android Monitor. Logcat Android bisa menjadi sangat panjang dan berantakan. Karena variabel LOG_TAG di setiap kelas berisi kata MainActivity atau SecondActivity, kata kunci ini memungkinkan Anda memfilter log hanya untuk hal-hal yang Anda minati.

    5. Bereksperimenlah dengan aplikasi dan catat bahwa peristiwa siklus hidup terjadi untuk merespons tindakan yang berbeda. Khususnya, coba hal-hal berikut ini:
      • Gunakan aplikasi dengan normal (mengirim pesan, membalas dengan pesan lain.)
      • Gunakan tombol kembali untuk kembali dari aktivitas kedua ke aktivitas utama.
      • Gunakan panah kiri pada bilah tindakan untuk kembali dari aktivitas kedua ke aktivitas utama.
      • Putar perangkat pada aktivitas utama dan kedua pada waktu yang berlainan dalam aplikasi dan amati apa yang terjadi dalam log dan layar.TIPS:Jika menjalankan aplikasi dalam emulator, Anda bisa menyimulasikan putaran dengan Ctrl-F11 atau Ctrl-Fn-F11.
      • Tekan tombol ringkasan (tombol kotak di sebelah kanan Beranda) dan tutup aplikasi (ketuk X).
      • Kembali ke layar beranda dan mulai ulang aplikasi

  4. Simpan status instance aktivitas dengan onSaveInstanceState()
  5. mungkin kita telah memperhatikan bahwa memutar perangkat tidak memengaruhi status aktivitas kedua sama sekali. Ini karena layout dan status aktivitas kedua dihasilkan dari layout dan intent yang mengaktifkannya. Bahkan jika aktivitas tersebut dibuat ulang, intent-nya akan tetap ada di sana dan data di dalam intent tersebut masih digunakan setiap onCreate() aktivitas kedua dipanggil.

    Selain itu, kita mungkin memperhatikan bahwa dalam kedua aktivitas setiap teks yang Anda ketik ke dalam pesan atau balasan EditTexts dipertahankan bahkan ketika perangkat diputar. Ini karena informasi status beberapa tampilan dalam layout secara otomatis disimpan di semua perubahan konfigurasi, dan nilai saat ini EditText adalah salah satu kasus ini.

    Satu-satunya status aktivitas yang harus diperhatikan adalah TextView untuk header balasan dan teks balasan dalam aktivitas utama. Kedua TextView secara default tidak terlihat, hanya muncul ketika Anda mengirimkan pesan kembali ke aktivitas utama dari aktivitas kedua.

    Selanjutnya akan menambahkan kode untuk mempertahankan status instance kedua TextView menggunakan onSaveInstanceState().
    1. Buka java/com.example.android.twoactivities/MainActivity.
    2. Tambahkan implementasi skeleton onSaveInstanceState() ke aktivitas, atau gunakan Code > Override Methods untuk menyisipkan pengganti kerangka.
    3. Periksa untuk melihat apakah header saat ini terlihat, dan jika demikian letakkan status visibilitas ke dalam bundel status dengan metode putBoolean() dan kunci "reply_visible". Ingat bahwa header dan teks balasan ditandai sebagai tidak terlihat sampai ada balasan dari aktivitas kedua. Jika header terlihat, maka ada data balasan yang perlu disimpan. Kita hanya berfokus pada status visibilitas -- teks header sebenarnya tidak perlu disimpan, karena teks tersebut tidak pernah berubah.
    4. Dalam pemeriksaan yang sama, tambahkan teks balasan ke dalam bundel.
    5. Jika header terlihat Anda bisa mengasumsikan bahwa pesan balasan juga terlihat. Anda tidak perlu menguji atau menyimpan status visibilitas pesan balasan saat ini. Hanya teks sebenarnya pesan yang masuk ke dalam bundel status dengan kunci "reply_text".

      Kita hanya menyimpan tampilan yang dapat berubah setelah aktivitas dibuat.

      Tampilan lain dalam aplikasi (EditText, Tombol) dapat dibuat ulang dari layout default kapan saja.

  6. Memulihkan status instance aktivitas dalam onCreate()
    1. Dalam metode onCreate(), tambahkan tes untuk memastikan bundelnya tidak null.

      Saat aktivitas dibuat, sistem meneruskan bundel status ke onCreate() karena itu hanya argumen. Pertama kali onCreate() dipanggil dan aplikasi Anda dimulai, bundelnya null, tidak ada status saat pertama kali aplikasi dimulai. Panggilan berikutnya ke onCreate() memiliki bundel yang diisi dengan data apa pun yang Anda simpan dalam onSaveInstanceState().

    2. Dalam pemeriksaan tersebut, dapatkan visibilitas saat ini (benar atau salah) dari bundel dengan kunci "reply_visible"
    3. Tambahkan tes di bawah baris sebelumnya untuk variabel isVisible.

      Jika ada kunci reply_visible" dalam bundel status (maka isVisible benar), kita perlu memulihkan statusnya.

    4. Dalam tes isVisible, buat header-nya terlihat.
    5. Dapatkan pesan balasan teks dari bundel dengan kunci "reply_text", dan setel TextView balasan untuk menunjukkan string tersebut.
    6. Jadikan TextView balasan terlihat juga:
    7. Jalankan aplikasi. Coba putar perangkat atau emulator untuk memastikan bahwa pesan balasan (jika ada) tetap ada di layar setelah aktivitas dibuat ulang.