1. Selamat Datang
Pengantar
Dalam praktik ini, Anda akan mempelajari siklus proses aktivitas lebih lanjut. Siklus proses adalah kumpulan status aktivitas selama masa aktifnya, dari saat dibuat hingga dihancurkan dan sistem mengklaim kembali resource-nya. Saat pengguna membuka beberapa aktivitas di aplikasi (serta ke dalam dan ke luar aplikasi), aktivitas akan bertransisi di antara berbagai status dalam siklus prosesnya.

Setiap tahap dalam siklus proses aktivitas memiliki metode callback yang sesuai: onCreate(), onStart(), onPause(), dan seterusnya. Saat sebuah aktivitas mengubah status, metode callback terkait akan dipanggil. Anda sudah melihat salah satu metode ini: onCreate(). Dengan mengganti salah satu metode callback siklus proses di class Activity, Anda dapat mengubah perilaku default aktivitas sebagai respons terhadap tindakan pengguna atau sistem.
Status aktivitas juga bisa berubah sebagai respons terhadap perubahan konfigurasi perangkat, misalnya saat pengguna memutar perangkat dari orientasi potret ke lanskap. Saat perubahan konfigurasi ini terjadi, aktivitas akan dihancurkan dan dibuat ulang dalam status default, dan pengguna mungkin kehilangan informasi yang telah dimasukkan dalam aktivitas. Agar pengguna tidak bingung, Anda perlu mengembangkan aplikasi guna mencegah kehilangan data yang tidak terduga. Nanti dalam praktik ini, Anda akan bereksperimen dengan perubahan konfigurasi dan mempelajari cara mempertahankan status aktivitas sebagai respons terhadap perubahan konfigurasi perangkat dan peristiwa siklus proses aktivitas lainnya.
Dalam praktik ini Anda menambahkan laporan logging ke aplikasi TwoActivities dan mengamati perubahan siklus proses aktivitas saat menggunakan aplikasi. Selanjutnya, Anda akan mulai menangani perubahan ini dan mempelajari cara menangani input pengguna dalam kondisi ini.
Yang harus sudah Anda ketahui
Anda harus sudah mampu:
- Membuat dan menjalankan project aplikasi di Android Studio.
 - Menambahkan laporan log ke aplikasi Anda dan melihat log tersebut di panel Logcat.
 - Memahami dan menggunakan 
ActivitydanIntent, serta memahami cara berinteraksi dengannya. 
Yang akan Anda pelajari
- Cara kerja siklus proses 
Activity. - Saat 
Activitydimulai, dijeda, dihentikan, dan dihancurkan. - Tentang metode callback siklus proses yang terkait dengan perubahan 
Activity. - Efek tindakan (seperti perubahan konfigurasi) yang dapat menghasilkan peristiwa siklus proses 
Activity. - Cara mempertahankan status 
Activitydi seluruh peristiwa siklus proses. 
Yang akan Anda lakukan
- Menambahkan kode ke aplikasi TwoActivities dari praktik sebelumnya untuk menerapkan berbagai callback siklus proses 
Activityguna menyertakan laporan logging. - Mengamati perubahan status saat aplikasi berjalan dan saat Anda berinteraksi dengan setiap 
Activitydi aplikasi. - Memodifikasi aplikasi untuk mempertahankan status instance 
Activityyang tanpa terduga dibuat ulang sebagai respons terhadap perilaku pengguna atau perubahan konfigurasi pada perangkat. 
2. Ringkasan aplikasi
Dalam praktik ini, Anda akan menambahkan aplikasi TwoActivities. Tampilan dan perilaku aplikasi ini kurang lebih sama seperti yang ada di codelab terakhir. Aplikasi ini berisi dua implementasi Activity dan memberi pengguna kemampuan untuk mengirim di antara keduanya. Perubahan yang Anda buat pada aplikasi dalam praktik ini tidak akan memengaruhi perilaku pengguna yang terlihat.
3. Tugas 1. Menambahkan callback siklus proses ke TwoActivities
Dalam tugas ini Anda akan mengimplementasikan semua metode callback siklus proses Activity untuk mencetak pesan ke logcat saat metode itu dipanggil. Pesan log ini akan memungkinkan Anda melihat kapan siklus proses Activity mengubah status, dan bagaimana perubahan status siklus proses tersebut memengaruhi aplikasi Anda saat aplikasi berjalan.
1.1 (Opsional) Menyalin Project TwoActivities
Untuk tugas dalam praktik ini, Anda akan memodifikasi project TwoActivities yang sudah ada, yang dibuat pada praktik sebelumnya. Jika Anda ingin mempertahankan project TwoActivities sebelumnya, ikuti langkah-langkah di Lampiran: Utilitas untuk membuat salinan project.
1.2 Mengimplementasikan callback ke MainActivity
- Buka project TwoActivities di Android Studio, dan buka MainActivity di panel Project > Android.
 - Dalam metode 
onCreate(), tambahkan laporan log berikut: 
Log.d(LOG_TAG, "-------");
Log.d(LOG_TAG, "onCreate");
- Tambahkan penggantian untuk callback 
onStart(), dengan pernyataan ke log untuk peristiwa tersebut: 
@Override
public void onStart(){
    super.onStart();
    Log.d(LOG_TAG, "onStart");
}
Untuk pintasan, pilih Code > Override Methods di Android Studio. Dialog muncul dengan semua metode yang mungkin dan bisa Anda gantikan dalam kelas. Memilih satu atau beberapa metode callback dari daftar akan menyisipkan template lengkap untuk metode tersebut, termasuk panggilan wajib ke superclass.
- Gunakan metode 
onStart()sebagai template untuk menerapkan callback siklus prosesonPause(),onRestart(),onResume(),onStop(), danonDestroy(). 
Semua metode callback memiliki tanda tangan yang sama (kecuali untuk nama). Jika Anda Menyalin dan Menempel onStart() untuk membuat metode callback lain, jangan lupa untuk memperbarui kontennya agar memanggil metode yang tepat dalam superclass, dan mencatat log metode yang benar.
- Jalankan aplikasi Anda.
 - Klik tab Logcat di bagian bawah Android Studio untuk menampilkan panel Logcat. Anda akan melihat tiga pesan log yang menunjukkan tiga status siklus proses yang dipindah oleh 
Activitysaat dimulai: 
D/MainActivity: ------- D/MainActivity: onCreate D/MainActivity: onStart D/MainActivity: onResume
1.3 Mengimplementasikan callback siklus proses dalam SecondActivity
Setelah Anda mengimplementasikan metode callback siklus proses untuk MainActivity, lakukan hal yang sama untuk SecondActivity.
- Buka SecondActivity.
 - Di bagian atas class, tambahkan konstanta untuk variabel 
LOG_TAG: 
private static final String LOG_TAG = SecondActivity.class.getSimpleName();
- Tambahkan callback siklus proses dan laporan log ke 
Activitykedua. (Anda dapat Menyalin dan Menempelkan metode callback dariMainActivity.) - Tambahkan laporan log ke metode 
returnReply()tepat sebelum metodefinish(): 
Log.d(LOG_TAG, "End SecondActivity");
1.4 Mengamati log saat aplikasi berjalan
- Jalankan aplikasi Anda.
 - Klik tab Logcat di bagian bawah Android Studio untuk menampilkan panel Logcat.
 - Masukkan Activity di kotak penelusuran. Logcat Android bisa menjadi sangat panjang dan berantakan. Karena variabel 
LOG_TAGdi setiap class berisi kataMainActivityatauSecondActivity, kata kunci ini memungkinkan Anda memfilter log hanya untuk hal-hal yang Anda fokuskan. 

Lakukan eksperimen dengan aplikasi dan perhatikan bahwa peristiwa siklus proses terjadi sebagai respons terhadap berbagai tindakan. Khususnya, coba hal-hal berikut ini:
- Gunakan aplikasi dengan normal (mengirim pesan, membalas dengan pesan lain).
 - Gunakan tombol Kembali untuk kembali dari 
Activitykedua keActivityutama. - Gunakan Panah atas di panel aplikasi untuk kembali dari 
Activitykedua keActivityutama. - Putar perangkat di 
Activityutama dan kedua pada waktu yang berbeda di aplikasi dan amati apa yang terjadi di log dan di layar. - Tekan tombol ringkasan (tombol kotak di sebelah kanan Layar Utama) dan tutup aplikasi (ketuk X).
 - Kembali ke layar utama dan mulai ulang aplikasi Anda.
 
TIPS: Jika menjalankan aplikasi di emulator, Anda dapat menyimulasikan rotasi dengan Control+F11 atau Control+Function+F11.
Kode solusi Tugas 1
Cuplikan kode berikut menunjukkan kode solusi untuk tugas pertama.
MainActivity
Cuplikan kode berikut menunjukkan kode yang ditambahkan di MainActivity, tetapi tidak di seluruh class.
Metode onCreate():
@Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // Log the start of the onCreate() method.
        Log.d(LOG_TAG, "-------");
        Log.d(LOG_TAG, "onCreate");
        // Initialize all the view variables.
        mMessageEditText = findViewById(R.id.editText_main);
        mReplyHeadTextView = findViewById(R.id.text_header_reply);
        mReplyTextView = findViewById(R.id.text_message_reply);
}
Metode siklus proses lainnya:
@Override
protected void onStart() {
        super.onStart();
        Log.d(LOG_TAG, "onStart");
}
@Override
protected void onPause() {
        super.onPause();
        Log.d(LOG_TAG, "onPause");
}
@Override
protected void onRestart() {
        super.onRestart();
        Log.d(LOG_TAG, "onRestart");
}
@Override
protected void onResume() {
        super.onResume();
        Log.d(LOG_TAG, "onResume");
}
@Override
protected void onStop() {
        super.onStop();
        Log.d(LOG_TAG, "onStop");
}
@Override
protected void onDestroy() {
        super.onDestroy();
        Log.d(LOG_TAG, "onDestroy");
}
SecondActivity
Cuplikan kode berikut menunjukkan kode yang ditambahkan di SecondActivity, tetapi tidak di seluruh class.
Di bagian atas class SecondActivity:
private static final String LOG_TAG = SecondActivity.class.getSimpleName();
Metode returnReply() :
public void returnReply(View view) {
        String reply = mReply.getText().toString();
        Intent replyIntent = new Intent();
        replyIntent.putExtra(EXTRA_REPLY, reply);
        setResult(RESULT_OK, replyIntent);
        Log.d(LOG_TAG, "End SecondActivity");
        finish();
}
Metode siklus proses lainnya:
Sama seperti MainActivity, di atas.
4. Tugas 2. Menyimpan dan memulihkan status instance Aktivitas.
Bergantung pada resource sistem dan perilaku pengguna, setiap Activity dalam aplikasi Anda dapat dimusnahkan dan dibuat ulang jauh lebih sering dari yang Anda pikirkan.
Anda mungkin melihat perilaku ini di bagian terakhir saat memutar perangkat atau emulator. Memutar perangkat adalah salah satu contoh perubahan konfigurasi perangkat. Walaupun rotasi adalah yang paling umum, semua hasil perubahan konfigurasi mengakibatkan Activity saat ini dimusnahkan dan dibuat ulang seperti baru. Jika Anda tidak mempertimbangkan perilaku ini dalam kode, saat perubahan konfigurasi terjadi, tata letak Activity mungkin akan kembali ke tampilan default dan nilai awalnya, dan pengguna Anda bisa kehilangan tempat, data, atau status progresnya di aplikasi Anda.
Status setiap Activity disimpan sebagai kumpulan key-value pair dalam objek Bundle yang disebut status instance Activity. Sistem menyimpan informasi status default ke status instance Bundle tepat sebelum Activity dihentikan, dan meneruskan Bundle tersebut ke instance Activity baru untuk dipulihkan.
Agar Activity tidak kehilangan data saat data dihancurkan dan dibuat ulang secara tidak terduga, Anda harus mengimplementasikan metode onSaveInstanceState(). Sistem memanggil metode ini di Activity (antara onPause() dan onStop()) jika ada kemungkinan Activity dimusnahkan dan dibuat ulang.
Data yang disimpan pada status instance hanya ditujukan untuk instance Activity spesifik ini saja selama sesi aplikasi saat ini. Saat Anda menghentikan dan memulai ulang sesi aplikasi baru, status instance Activity hilang dan Activity kembali ke tampilan default-nya. Jika Anda perlu menyimpan data pengguna antar sesi aplikasi, gunakan database atau preferensi bersama. Anda akan mempelajari keduanya dalam praktik berikutnya.
2.1 Menyimpan status instance Aktivitas dengan onSaveInstanceState()
Anda mungkin telah memperhatikan bahwa memutar perangkat tidak memengaruhi status Activity kedua sama sekali. Hal ini karena tata letak dan status Activity kedua dihasilkan dari tata letak dan Intent yang mengaktifkannya. Meskipun Activity dibuat ulang, Intent masih ada dan data dalam Intent tersebut masih digunakan setiap kali metode onCreate() di Activity kedua dipanggil.
Selain itu, Anda mungkin melihat bahwa di setiap Activity, setiap teks yang Anda ketik ke dalam elemen pesan atau balasan EditText akan dipertahankan meskipun perangkat diputar. Ini karena informasi status beberapa elemen View dalam tata letak secara otomatis disimpan di semua perubahan konfigurasi, dan nilai saat ini dari EditText adalah salah satu contohnya.
Jadi, satu-satunya status Activity yang menjadi fokus Anda adalah elemen TextView untuk header balasan dan teks balasan di Activity utama. Kedua elemen TextView tidak terlihat secara default, tetapi hanya muncul setelah Anda mengirim pesan kembali ke Activity utama dari Activity kedua.
Dalam tugas ini, Anda menambahkan kode untuk mempertahankan status instance kedua elemen TextView ini menggunakan onSaveInstanceState().
- Buka MainActivity.
 - Tambahkan implementasi kerangka 
onSaveInstanceState()ini keActivity, atau gunakan Code > Override Methods untuk menyisipkan penggantian kerangka. 
@Override
public void onSaveInstanceState(Bundle outState) {
          super.onSaveInstanceState(outState);
}
- Periksa untuk melihat apakah header saat ini terlihat, dan jika demikian, masukkan status visibilitas tersebut ke 
Bundlestatus dengan metodeputBoolean()dan kunci"reply_visible". 
    if (mReplyHeadTextView.getVisibility() == View.VISIBLE) {
        outState.putBoolean("reply_visible", true);
    }
Ingat bahwa header dan teks balasan ditandai sebagai tidak terlihat sampai ada balasan dari Activity kedua. Jika header terlihat, maka ada data balasan yang perlu disimpan. Perhatikan bahwa kita hanya berfokus pada status visibilitas tersebut — teks header sebenarnya tidak perlu disimpan, karena teks tersebut tidak pernah berubah.
- Dalam pemeriksaan yang sama, tambahkan teks balasan ke dalam 
Bundle. 
outState.putString("reply_text",mReplyTextView.getText().toString());
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 dari pesan yang masuk ke Bundle status dengan kunci "reply_text".
Anda hanya harus menyimpan status dari elemen View, yang mungkin berubah setelah Activity dibuat. Elemen View lainnya di aplikasi (EditText, Button) dapat dibuat ulang dari tata letak default kapan saja.
Perhatikan bahwa sistem akan menyimpan status beberapa elemen View, seperti konten EditText.
2.2. Memulihkan status instance Aktivitas di onCreate()
Setelah menyimpan status instance Activity, Anda juga harus memulihkannya saat Activity dibuat ulang. Anda dapat melakukannya di onCreate(), atau dengan menerapkan callback onRestoreInstanceState(), yang dipanggil setelah onStart() setelah Activity dibuat.
Biasanya, tempat terbaik untuk memulihkan status Activity adalah di onCreate(), untuk memastikan bahwa UI, termasuk statusnya, tersedia sesegera mungkin. Kadang lebih nyaman melakukannya dalam onRestoreInstanceState() setelah semua inisialisasi dilakukan, atau mengizinkan subclass memutuskan apakah akan menggunakan implementasi default Anda.
- Dalam metode 
onCreate(), setelah variabelViewdiinisialisasi denganfindViewById(), tambahkan pengujian untuk memastikan bahwasavedInstanceStatebukan null. 
// Initialize all the view variables.
mMessageEditText = findViewById(R.id.editText_main);
mReplyHeadTextView = findViewById(R.id.text_header_reply);
mReplyTextView = findViewById(R.id.text_message_reply);
// Restore the state.
if (savedInstanceState != null) {
}
Saat Activity dibuat, sistem akan meneruskan Bundle status ke onCreate() sebagai satu-satunya argumen. Saat onCreate() pertama kali dipanggil dan aplikasi Anda dimulai, Bundle adalah null—tidak ada status saat pertama kali aplikasi dimulai. Panggilan berikutnya ke onCreate() memiliki paket yang diisi dengan data yang Anda simpan di onSaveInstanceState().
- Di dalam pemeriksaan tersebut, dapatkan visibilitas saat ini (benar atau salah) dari 
Bundledengan kunci"reply_visible". 
if (savedInstanceState != null) {
    boolean isVisible = 
                     savedInstanceState.getBoolean("reply_visible");
}
- Tambahkan pengujian di bawah baris sebelumnya untuk variabel isVisible.
 
if (isVisible) {
}
Jika ada kunci reply_visible dalam Bundle status (sehingga isVisible adalah true), Anda harus memulihkan statusnya.
- Di dalam pengujian 
isVisible, buat header-nya terlihat. 
mReplyHeadTextView.setVisibility(View.VISIBLE);
- Dapatkan pesan balasan teks dari 
Bundledengan kunci"reply_text", dan setelTextViewbalasan untuk menampilkan string tersebut. 
mReplyTextView.setText(savedInstanceState.getString("reply_text"));
- Buat balasan 
TextViewjuga terlihat: 
mReplyTextView.setVisibility(View.VISIBLE);
- Jalankan aplikasi. Coba putar perangkat atau emulator untuk memastikan bahwa pesan balasan (jika ada) tetap berada di layar setelah 
Activitydibuat ulang. 
Kode solusi Tugas 2
Cuplikan kode berikut menunjukkan kode solusi untuk tugas ini.
MainActivity
Cuplikan kode berikut menunjukkan kode yang ditambahkan di MainActivity, tetapi tidak di seluruh class.
Metode onSaveInstanceState():
@Override
public void onSaveInstanceState(Bundle outState) {
   super.onSaveInstanceState(outState);
   // If the heading is visible, message needs to be saved.
   // Otherwise we're still using default layout.
   if (mReplyHeadTextView.getVisibility() == View.VISIBLE) {
       outState.putBoolean("reply_visible", true);
       outState.putString("reply_text", 
                      mReplyTextView.getText().toString());
   }
}
Metode onCreate():
@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
   Log.d(LOG_TAG, "-------");
   Log.d(LOG_TAG, "onCreate");
   // Initialize all the view variables.
   mMessageEditText = findViewById(R.id.editText_main);
   mReplyHeadTextView = findViewById(R.id.text_header_reply);
   mReplyTextView = findViewById(R.id.text_message_reply);
   // Restore the saved state. 
   // See onSaveInstanceState() for what gets saved.
   if (savedInstanceState != null) {
       boolean isVisible = 
                     savedInstanceState.getBoolean("reply_visible");
       // Show both the header and the message views. If isVisible is
       // false or missing from the bundle, use the default layout.
       if (isVisible) {
           mReplyHeadTextView.setVisibility(View.VISIBLE);
           mReplyTextView.setText(savedInstanceState
                                  .getString("reply_text"));
           mReplyTextView.setVisibility(View.VISIBLE);
       }
   }
}
Project yang selesai:
Project Android Studio: TwoActivitiesLifecycle
5. Tantangan coding
Tantangan: Membuat aplikasi daftar belanja sederhana dengan aktivitas utama untuk daftar yang dibuat pengguna, dan aktivitas kedua untuk daftar item belanja umum.
- Aktivitas utama harus berisi daftar yang akan di-build, yang harus terdiri dari sepuluh elemen 
TextViewkosong. - Tombol Add Item di aktivitas utama akan meluncurkan aktivitas kedua yang berisi daftar item belanja umum (Cheese, Rice, Apples, dan sebagainya). Gunakan elemen 
Buttonuntuk menampilkan item. - Memilih item akan mengembalikan pengguna ke aktivitas utama, dan memperbarui 
TextViewkosong untuk menyertakan item yang dipilih. 
Gunakan Intent untuk meneruskan informasi dari satu Activity ke yang lain. Pastikan status daftar belanja saat ini disimpan saat pengguna memutar perangkat.
6. Ringkasan
- Siklus proses Aktivitas adalah kumpulan status yang dimigrasikan oleh 
Activity, dimulai saat pertama kali dibuat dan berakhir saat sistem Android mengklaim kembali resource untukActivitytersebut. - Saat pengguna beralih dari satu 
Activityke yang lain, serta di dalam dan di luar aplikasi, setiapActivityakan berpindah antar-status di siklus prosesActivity. - Setiap status dalam siklus proses 
Activitymemiliki metode callback yang sesuai dan dapat Anda ganti di classActivity. - Metode siklus proses adalah 
onCreate(),onStart(),onPause(),onRestart(),onResume(),onStop(),onDestroy(). - Mengganti metode callback siklus proses mengizinkan Anda menambahkan perilaku yang terjadi saat 
Activitybertransisi ke status tersebut. - Anda dapat menambahkan metode pengganti kerangka ke class dalam Android Studio dengan Code > Override.
 - Perubahan konfigurasi perangkat seperti hasil putaran dalam 
Activitydimusnahkan dan dibuat ulang seperti baru. - Sebagian status 
Activitydipertahankan pada perubahan konfigurasi, termasuk nilai elemenEditTextsaat ini. Untuk semua data lainnya, Anda harus secara eksplisit menyimpan data sendiri. - Simpan status instance 
Activitydalam metodeonSaveInstanceState(). - Data status instance disimpan sebagai key-value pair dalam 
Bundle. Gunakan metodeBundleuntuk memasukkan data dan mendapatkan data kembali dariBundle. - Pulihkan status instance di 
onCreate(), yang merupakan cara yang direkomendasikan, atauonRestoreInstanceState(). 
7. Konsep terkait
Dokumentasi konsep terkait ada di 2.2: Siklus proses dan status Aktivitas.
8. Pelajari lebih lanjut
Dokumentasi Android Studio:
Dokumentasi developer Android:
9. Tugas sekolah
Bagian ini mencantumkan kemungkinan tugas pekerjaan rumah untuk siswa yang mengerjakan codelab ini sebagai bagian dari kursus yang dipimpin oleh instruktur. Instruktur menentukan hal berikut:
- Memberikan pekerjaan rumah jika diperlukan.
 - Memberi tahu siswa cara mengirimkan tugas pekerjaan rumah.
 - Memberi nilai tugas pekerjaan rumah.
 
Instruktur bisa menggunakan saran ini sesuai kebutuhan, dan bebas menugaskan pekerjaan rumah lain yang dirasa cocok.
Jika Anda menyelesaikan codelab ini sendiri, gunakan tugas pekerjaan rumah ini untuk menguji pengetahuan Anda.
Membangun dan menjalankan aplikasi
- Buat aplikasi dengan tata letak yang berisi penghitung 
TextView,Buttonuntuk menambahkan penghitung, danEditText. Lihat screenshot di bawah sebagai contoh. Anda tidak harus membuat duplikat tata letak secara persis. - Tambahkan pengendali klik untuk 
Buttonyang menambahkan penghitung. - Jalankan aplikasi dan tambahkan penghitung. Masukkan beberapa teks ke dalam 
EditText. - Putar perangkat. Perhatikan bahwa penghitung direset, tetapi 
EditTexttidak. - Implementasikan 
onSaveInstanceState()untuk menyimpan status aplikasi saat ini. - Perbarui 
onCreate()untuk memulihkan status aplikasi. - Pastikan bahwa saat Anda memutar perangkat, status aplikasi tetap dipertahankan.
 

Jawab pertanyaan-pertanyaan berikut
Pertanyaan 1
Jika Anda menjalankan aplikasi pekerjaan rumah sebelum menerapkan onSaveInstanceState(), apa yang terjadi jika Anda memutar perangkat? Pilih satu:
EditTexttidak lagi berisi teks yang Anda masukkan, tetapi penghitung dipertahankan.- Penghitung direset ke 0 dan 
EditTexttidak lagi berisi teks yang Anda masukkan. - Penghitung direset ke 0, tetapi konten 
EditTextdipertahankan. - Penghitung dan konten 
EditTextdipertahankan. 
Pertanyaan 2
Apa metode siklus proses Activity yang dipanggil ketika perubahan konfigurasi-perangkat (seperti rotasi) terjadi?  Pilih satu:
- Android langsung mematikan 
Activitydengan memanggilonStop(). Kode Anda harus memulai ulangActivity. - Android mematikan 
Activitydengan memanggilonPause(),onStop(), danonDestroy(). Kode Anda harus memulai ulangActivity. - Android mematikan 
Activitydengan memanggilonPause(),onStop(), danonDestroy(), lalu memulai lagi dari awal, memanggilonCreate(),onStart(), danonResume(). - Android langsung memanggil 
onResume(). 
Pertanyaan 3
Kapan siklus proses Activity dipanggil onSaveInstanceState()? Pilih satu:
onSaveInstanceState()dipanggil sebelum metodeonStop().onSaveInstanceState()dipanggil sebelum metodeonResume().onSaveInstanceState()dipanggil sebelum metodeonCreate().onSaveInstanceState()dipanggil sebelum metodeonDestroy().
Pertanyaan 4
Metode siklus proses Activity mana yang paling baik digunakan untuk menyimpan data sebelum Activity selesai atau dihancurkan? Pilih satu:
onPause()atauonStop()onResume()atauonCreate()onDestroy()onStart()atauonRestart()
Mengirimkan aplikasi Anda untuk dinilai
Panduan untuk penilai
Pastikan aplikasi memiliki beberapa fitur berikut:
- Aplikasi menampilkan penghitung, 
Buttonuntuk menambah penghitung tersebut, danEditText. - Mengklik 
Buttonakan menambahkan penghitung sebesar 1. - Saat perangkat diputar, penghitung dan status 
EditTextdipertahankan. - Implementasi 
MainActivity.javamenggunakan metodeonSaveInstanceState()untuk menyimpan nilai penghitung. - Implementasi pengujian 
onCreate()untuk eksistensioutStateBundle. JikaBundletersebut ada, nilai penghitung akan dipulihkan dan disimpan keTextView. 
10. Codelab berikutnya
Untuk menemukan codelab praktik berikutnya dalam kursus Dasar-Dasar Android Developer (V2), lihat Codelabs untuk Dasar-Dasar Android Developer (V2).
Untuk ringkasan kursus, termasuk link ke bab, aplikasi, dan slide konsep, lihat Dasar-Dasar Android Developer (Versi 2).