7. Application Life Cycle

Share:
Yang akan Anda pelajari di artikel ini, yaitu :
* Pemahaman tentang life cycle (siklus hidup) activity
* Activity Stack
* Activity State
* Memonitor perubahan state
* Memahami activity life time
* Perubahan konfigurasi
* Menyimpan dan memulihkan data saat perubahan konfigurasi

Tentang Life Cycle

Pemahaman yang bagus tentang Life Cycle penting untuk memastikan bahwa aplikasi yang dibuat dapat memanajemen sumber daya dengan baik. Dalam aplikasi ada yang dinamakan dengan lifetime process. Proses pada lifetime diatur oleh Android runtime. Android runtime mengatur terminasi dari setiap lifetime process tersebut. Siklus hidup dari suatu activity ditentukan oleh posisinya dalam Activity Stack. Ada beberapa transisi state yang terjadi saat activity baru dijalankan, saat ditambahkan ke stack, dihapus dari stack, dan dimusnahkan untuk memulihkan sumber daya.

Activity Stack

Siklus hidup dari suatu activity ditentukan oleh posisinya dalam Activity Stack. Ketika activity dijalankan, maka akan berstatus active dan diletakkan di tumpukan paling atas. Jika user menggunakan tombol kembali, activity yang berada di tumpukan paling atas dikeluarkan, sedangkan activity yang berada di tumpukan bawah akan berpindah ke tumpukan atas dan berstatus active. Lihat diagram di bawah :



Prioritas aplikasi dipengaruhi oleh activity yang prioritasnya paling tinggi dalam activity stack. Android memory manager menggunakan activity stack ini untuk menentukan prioritas suatu aplikasi.

Activity State

Ketika dibuat dan dimusnahkan, masuk dan keluar stack (tumpukan), activity melewati beberapa tahap state berikut :
1. Active : Ketika berada ditumpukan paling atas, activity akan berstatus sebagai visible, focused, dan foreground activity. Android akan mempertahankan activity ini dan memusnahkan activity pada tumpukan lebih bawah untuk membebaskan sumber daya.
2. Paused : Activity tidak difokuskan namun tetap berstatus active. Jika activity di tumpukan paling atas memiliki latar belakang transparan, activity di tumpukan bawahnya akan kelihatan.
3. Stopped : Ketika activity tidak lagi berstatus visible, dan berhenti. Namun masih berada di memory dan menyimpan semua informasi state.
4. Inactive : Ketika activity tidak lagi berstatus visible dan dihentikan, activity akan bertatus inactive. Activity akan dihapus dari stack (tumpukan).
Penting untuk diperhatikan. Bahwa seharusnya tidak ada perbedaan dalam transisi paused, stopped dan inactive, jadi penting untuk menyimpan semua keadaan UI dan semua data ketika activity berada pada state paused atau stopped. Ketika activity berstatus active, data dapat dikembalikan.

Perubahan State

Android menyediakan beberapa event handle


Ada 7 lifecycle method, yaitu :
1. onCreate() : dipanggil ketika activity pertama kali dibuat. Digunakan untuk menginisialisasi objek, binding data ke list, dan lain-lain.
2. onRestart() : dipanggil setelah activity berhenti(stopped), diikuti dengan memanggil onStart().
3. onStart() : dipanggil ketika activity akan berstatus visible. Diikuti dengan memanggil onResume jika akan berstatus foreground, atau onStop() jika akan berstatus hidden.
4. onResume() : dipanggil ketika activity akan memulai berinteraksi dengan user. Di sini activity berada pada stack paling atas.
5. onPause() : dipanggil ketika akan berada di background, tetapi activity belum dimusnahkan.
6. onStop() : dipanggil ketika tidak lagi berstatus visible.
7. onDestroy() : dipanggil sebelum activity akan dimusnahkan.

Perlu diperhatikan, bahwa onDestroy() tidak akan selalu dipanggil. Ketika activity dihentikan (stopped), sistem akan memusnahkan semua objek jika diperlukan untuk membebaskan memori sistem. Dalam keaadaan yang ekstrem, sistem akan menghentikan aplikasi tanpa memanggil method onDestroy(). Maka dari itu gunakan method onPause() dan onStop() untuk melakukan aktivitas yang penting. Gunakan onStop() untuk melakukan aktivitas yang lebih besar.

Ketika activity pertama dijalankan, event yang dipanggil, yaitu :
onCreate(), onStart(), onResume()

Ketika user mengklik tombol home, event yang dipanggil, yaitu :
onPause(), onStop()

Ketika user mengklik tombol phone dialer, event yang dipanggil, yaitu :
onRestart(), onStart(), onResume()

Ketika user mengklik tombol kembali, atau finish, event yang dipanggil, yaitu :
onPause(), onStop(), onDestroy()

Memonitor perubahan activity state

Kita dapat menggunakan kelas android.util.Log untuk mencatat (log) pesan. Kita akan menggunakan method statis kelas Log, yaitu Log.d(stringTag, stringMessage).
Berikut penggunaannya :

String TAG = "DEBUG";

@Override
public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.layout_main);
 Log.d(TAG, "onCreate(Bundle) called");
}

@Override
public void onStart() {
 super.onStart();
 Log.d(TAG, "onStart() called");
}

@Override
public void onPause() {
 super.onPause();
 Log.d(TAG, "onPause() called");
}

@Override
public void onResume() {
 super.onResume();
 Log.d(TAG, "onResume() called");
}

@Override
public void onStop() {
 super.onStop();
 Log.d(TAG, "onStop() called");
}

@Override
public void onDestroy() {
 super.onDestroy();
 Log.d(TAG, "onDestroy() called");
}

Activity Life Time

Berikut diagram lifetime terhadap activity state.


Full LifeTime
Berlangsung mulai dari onCreate sampai dengan onDestroy. Gunakan method onCreate() untuk menginisialisasi activity : merender user interface, mendapatkan referensi ke objek UI, alokasi referensi ke variabel kelas, menjalankan Service dan Timer. Jika activity termusnahkan secara tiba-tiba, onCreate melewatkan objek Bundle yang menyimpan data state sebelumnya yang disimpan di onSaveInstanceState. Objek tersebut bisa digunakan untuk mengembalikan keadaan UI ke semula, melalui method onCreate() ataupun method onRestoreInstanceState(). Gunakan onDestroy untuk membersihkan sumber daya yang dibuat di onCreate(), pastikan koneksi, seperti internet dan database, ditutup dan dihentikan.

Visible Life Time
Berlangsung mulai dari onStart sampai dengan onStop. Gunakan onStop untuk menjeda atau menghentikan animasi, thread, Sensor listener, GPS, Timer, Service, atau proses lainnya yang mengupdate UI. Gunakan onStart untuk melanjutkan proses ketika UI tampil kembali. Method onStart()/onStop juga digunakan untuk meregister dan unregister Broadcast Receiver yang digunakan untuk mengupdate UI.

Active Life Time
Activity yang berstatus active berada pada foreground dan menerima event masukan dari user. Tetap pastikan tugas yang diberikan pada onPause dan onResume cepat dan ringan untuk memastikan aplikasi tetap responsif ketika berpindah status foreground atau background. Method onSaveInstanceState secara langsung dipanggil sebelum onPause. Gunakan method tersebut untuk menyimpan data atau state UI activity yang akan diteruskan kembali ke method onCreate dan onRestoreInstanceState. Gunakan untuk menyimpan data, seperti checkbox, focus, teks input, dan lain-lain. Jangan gunakan method onResume untuk mengembalikan keadaan atau data UI.

Perubahan konfigurasi dan state Activity

Perubahan konfigurasi seperti rotasi layar akan membuat data atau nilai yang dimasukkan atau state pada UI akan direset. Konfigurasi lain berupa memilih bahasa sistem berbeda, masuk ke mode multi-jendela (android 7) dan lain-lain. Pada saat perubahan konfigurasi, sistem akan menutup aktivitas (memanggil onPause, onStop, dan onDestroy), kemudian memulainya dari awal (memanggil onCreate, onStart, dan onResume).

Menggunakan method onSaveInstanceState

Gunakan method onSaveInstanceState untuk menyimpan nilai-nilai yang dimasukkan pengguna pada UI atau state yang ada pada UI. Data atau nilai tersebut disimpan di objek Bundle sebelum aktivitas dihentikan. Kemudian akan diteruskan ke method onCreate dan onRestoreInstaceState. Untuk penggunaan method dapat Anda perhatikan di bawah :

Menyimpan data

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
 super.onSaveInstanceState(savedInstanceState);
 // Save the user's current game state
 savedInstanceState.putInt("score", mCurrentScore);
 savedInstanceState.putInt("level", mCurrentLevel);
}

Memulihkan kembali data

@Override
protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.layout_main);
 
 // Always call the superclass first
 // Check whether we're recreating a previously destroyed instance
 if (savedInstanceState != null) {
  // Restore value of members from saved state
  mCurrentScore = savedInstanceState.getInt("score");
  mCurrentLevel = savedInstanceState.getInt("level");
 } else {
  // Probably initialize members with default values for a new instance
 }
}

atau menggunakan

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    
 // Always call the superclass first
 // Check whether we're recreating a previously destroyed instance
 if (savedInstanceState != null) {
  // Restore value of members from saved state
  mCurrentScore = savedInstanceState.getInt("score");
  mCurrentLevel = savedInstanceState.getInt("level");
 } else {
  // Probably initialize members with default values for a new instance
 }
}

Tidak ada komentar