Dasar-dasar Android 02.2: Siklus proses dan status aktivitas

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.

Diagram Siklus Proses Aplikasi

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 Activity dan Intent, serta memahami cara berinteraksi dengannya.

Yang akan Anda pelajari

  • Cara kerja siklus proses Activity.
  • Saat Activity dimulai, 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 Activity di seluruh peristiwa siklus proses.

Yang akan Anda lakukan

  • Menambahkan kode ke aplikasi TwoActivities dari praktik sebelumnya untuk menerapkan berbagai callback siklus proses Activity guna menyertakan laporan logging.
  • Mengamati perubahan status saat aplikasi berjalan dan saat Anda berinteraksi dengan setiap Activity di aplikasi.
  • Memodifikasi aplikasi untuk mempertahankan status instance Activity yang 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

  1. Buka project TwoActivities di Android Studio, dan buka MainActivity di panel Project > Android.
  2. Dalam metode onCreate(), tambahkan laporan log berikut:
Log.d(LOG_TAG, "-------");
Log.d(LOG_TAG, "onCreate");
  1. 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.

  1. Gunakan metode onStart() sebagai template untuk menerapkan callback siklus proses onPause(), onRestart(), onResume(), onStop(), dan onDestroy().

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.

  1. Jalankan aplikasi Anda.
  2. 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 Activity saat 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.

  1. Buka SecondActivity.
  2. Di bagian atas class, tambahkan konstanta untuk variabel LOG_TAG:
private static final String LOG_TAG = SecondActivity.class.getSimpleName();
  1. Tambahkan callback siklus proses dan laporan log ke Activity kedua. (Anda dapat Menyalin dan Menempelkan metode callback dari MainActivity.)
  2. Tambahkan laporan log ke metode returnReply() tepat sebelum metode finish():
Log.d(LOG_TAG, "End SecondActivity");

1.4 Mengamati log saat aplikasi berjalan

  1. Jalankan aplikasi Anda.
  2. Klik tab Logcat di bagian bawah Android Studio untuk menampilkan panel Logcat.
  3. Masukkan Activity di kotak penelusuran. Logcat Android bisa menjadi sangat panjang dan berantakan. Karena variabel LOG_TAG di setiap class berisi kata MainActivity atau SecondActivity, kata kunci ini memungkinkan Anda memfilter log hanya untuk hal-hal yang Anda fokuskan.

Log yang menampilkan status siklus proses

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 Activity kedua ke Activity utama.
  • Gunakan Panah atas di panel aplikasi untuk kembali dari Activity kedua ke Activity utama.
  • Putar perangkat di Activity utama 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().

  1. Buka MainActivity.
  2. Tambahkan implementasi kerangka onSaveInstanceState() ini ke Activity, atau gunakan Code > Override Methods untuk menyisipkan penggantian kerangka.
@Override
public void onSaveInstanceState(Bundle outState) {
          super.onSaveInstanceState(outState);
}
  1. Periksa untuk melihat apakah header saat ini terlihat, dan jika demikian, masukkan status visibilitas tersebut ke Bundle status dengan metode putBoolean() 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.

  1. 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.

  1. Dalam metode onCreate(), setelah variabel View diinisialisasi dengan findViewById(), tambahkan pengujian untuk memastikan bahwa savedInstanceState bukan 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().

  1. Di dalam pemeriksaan tersebut, dapatkan visibilitas saat ini (benar atau salah) dari Bundle dengan kunci "reply_visible".
if (savedInstanceState != null) {
    boolean isVisible =
                     savedInstanceState.getBoolean("reply_visible");
}
  1. 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.

  1. Di dalam pengujian isVisible, buat header-nya terlihat.
mReplyHeadTextView.setVisibility(View.VISIBLE);
  1. Dapatkan pesan balasan teks dari Bundle dengan kunci "reply_text", dan setel TextView balasan untuk menampilkan string tersebut.
mReplyTextView.setText(savedInstanceState.getString("reply_text"));
  1. Buat balasan TextView juga terlihat:
mReplyTextView.setVisibility(View.VISIBLE);
  1. Jalankan aplikasi. Coba putar perangkat atau emulator untuk memastikan bahwa pesan balasan (jika ada) tetap berada di layar setelah Activity dibuat 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 TextView kosong.
  • Tombol Add Item di aktivitas utama akan meluncurkan aktivitas kedua yang berisi daftar item belanja umum (Cheese, Rice, Apples, dan sebagainya). Gunakan elemen Button untuk menampilkan item.
  • Memilih item akan mengembalikan pengguna ke aktivitas utama, dan memperbarui TextView kosong 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 untuk Activity tersebut.
  • Saat pengguna beralih dari satu Activity ke yang lain, serta di dalam dan di luar aplikasi, setiap Activity akan berpindah antar-status di siklus proses Activity.
  • Setiap status dalam siklus proses Activity memiliki metode callback yang sesuai dan dapat Anda ganti di class Activity.
  • Metode siklus proses adalah onCreate(), onStart(), onPause(), onRestart(), onResume(), onStop(), onDestroy().
  • Mengganti metode callback siklus proses mengizinkan Anda menambahkan perilaku yang terjadi saat Activity bertransisi ke status tersebut.
  • Anda dapat menambahkan metode pengganti kerangka ke class dalam Android Studio dengan Code > Override.
  • Perubahan konfigurasi perangkat seperti hasil putaran dalam Activity dimusnahkan dan dibuat ulang seperti baru.
  • Sebagian status Activity dipertahankan pada perubahan konfigurasi, termasuk nilai elemen EditText saat ini. Untuk semua data lainnya, Anda harus secara eksplisit menyimpan data sendiri.
  • Simpan status instance Activity dalam metode onSaveInstanceState().
  • Data status instance disimpan sebagai key-value pair dalam Bundle. Gunakan metode Bundle untuk memasukkan data dan mendapatkan data kembali dari Bundle.
  • Pulihkan status instance di onCreate(), yang merupakan cara yang direkomendasikan, atau onRestoreInstanceState().

7. Konsep terkait

Dokumentasi konsep terkait ada di 2.2: Siklus proses dan status Aktivitas.

8. Mempelajari lebih lanjut

Dokumentasi Android Studio:

Dokumentasi developer Android:

9. Pekerjaan Rumah

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

  1. Buat aplikasi dengan tata letak yang berisi penghitung TextView, Button untuk menambahkan penghitung, dan EditText. Lihat screenshot di bawah sebagai contoh. Anda tidak harus membuat duplikat tata letak secara persis.
  2. Tambahkan pengendali klik untuk Button yang menambahkan penghitung.
  3. Jalankan aplikasi dan tambahkan penghitung. Masukkan beberapa teks ke dalam EditText.
  4. Putar perangkat. Perhatikan bahwa penghitung direset, tetapi EditText tidak.
  5. Implementasikan onSaveInstanceState() untuk menyimpan status aplikasi saat ini.
  6. Perbarui onCreate() untuk memulihkan status aplikasi.
  7. Pastikan bahwa saat Anda memutar perangkat, status aplikasi tetap dipertahankan.

ebaf84570af6dd46.png

Jawab pertanyaan-pertanyaan berikut

Pertanyaan 1

Jika Anda menjalankan aplikasi pekerjaan rumah sebelum menerapkan onSaveInstanceState(), apa yang terjadi jika Anda memutar perangkat? Pilih satu:

  • EditText tidak lagi berisi teks yang Anda masukkan, tetapi penghitung dipertahankan.
  • Penghitung direset ke 0 dan EditText tidak lagi berisi teks yang Anda masukkan.
  • Penghitung direset ke 0, tetapi konten EditText dipertahankan.
  • Penghitung dan konten EditText dipertahankan.

Pertanyaan 2

Apa metode siklus proses Activity yang dipanggil ketika perubahan konfigurasi-perangkat (seperti rotasi) terjadi? Pilih satu:

  • Android langsung mematikan Activity dengan memanggil onStop(). Kode Anda harus memulai ulang Activity.
  • Android mematikan Activity dengan memanggil onPause(), onStop(), dan onDestroy(). Kode Anda harus memulai ulang Activity.
  • Android mematikan Activity dengan memanggil onPause(), onStop(), dan onDestroy(), lalu memulai lagi dari awal, memanggil onCreate(), onStart(), dan onResume().
  • Android langsung memanggil onResume().

Pertanyaan 3

Kapan siklus proses Activity dipanggil onSaveInstanceState()? Pilih satu:

  • onSaveInstanceState() dipanggil sebelum metode onStop().
  • onSaveInstanceState() dipanggil sebelum metode onResume().
  • onSaveInstanceState() dipanggil sebelum metode onCreate().
  • onSaveInstanceState() dipanggil sebelum metode onDestroy().

Pertanyaan 4

Metode siklus proses Activity mana yang paling baik digunakan untuk menyimpan data sebelum Activity selesai atau dihancurkan? Pilih satu:

  • onPause() atau onStop()
  • onResume() atau onCreate()
  • onDestroy()
  • onStart() atau onRestart()

Mengirimkan aplikasi Anda untuk dinilai

Panduan untuk penilai

Pastikan aplikasi memiliki beberapa fitur berikut:

  • Aplikasi menampilkan penghitung, Button untuk menambah penghitung tersebut, dan EditText.
  • Mengklik Button akan menambahkan penghitung sebesar 1.
  • Saat perangkat diputar, penghitung dan status EditText dipertahankan.
  • Implementasi MainActivity.java menggunakan metode onSaveInstanceState() untuk menyimpan nilai penghitung.
  • Implementasi pengujian onCreate() untuk eksistensi outState Bundle. Jika Bundle tersebut ada, nilai penghitung akan dipulihkan dan disimpan ke TextView.

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).