Siklus hidup aplikasi seluler menentukan bagaimana perilaku aplikasi saat diluncurkan, diminimalkan, kembali dari latar belakang, dan ditutup. Dalam artikel ini, kita akan membahas App Lifecycle (iOS), Activity Lifecycle (Android), Fragment Lifecycle, ViewController Lifecycle dan LifecycleOwner. Memahami proses-proses ini sangat penting untuk mencegah kebocoran memori, kehilangan data, dan perilaku aplikasi yang tidak benar. Detail lebih lanjut di dokumentasi resmi Android Activity Lifecycle.
Poin Penting
Sebelum membahas siklus hidup layar individu, penting untuk memahami siklus hidup seluruh aplikasi. Di iOS, aplikasi melewati lima status: Not Running (tidak berjalan), Inactive (di latar belakang, tidak menerima peristiwa), Active (aktif), Background (di latar belakang, kode dijalankan) dan Suspended (di latar belakang, kode dijeda). Status-status ini dikelola di AppDelegate melalui metode applicationDidFinishLaunching, applicationDidBecomeActive, applicationWillResignActive, applicationDidEnterBackground dan applicationWillTerminate.
Di Android, padanannya adalah Application Lifecycle, yang dilacak melalui antarmuka Application.ActivityLifecycleCallbacks. Namun, Android lebih fokus pada siklus hidup sebuah Activity — layar aplikasi individual. Ini karena aplikasi Android dapat terdiri dari beberapa Activity, masing-masing dengan siklusnya sendiri.
Pendekatan modern di Android adalah menggunakan ProcessLifecycleOwner dari pustaka lifecycle-process. Ini memungkinkan pelacakan status seluruh proses tanpa terikat pada Activity tertentu. Di iOS, UISceneDelegate (sejak iOS 13) atau AppDelegate digunakan untuk melacak status aplikasi. SceneDelegate menangani beberapa jendela (multiwindow) di iPad. Memahami App Lifecycle sangat penting bagi IT Sectr saat mengembangkan aplikasi dengan sinkronisasi latar belakang, streaming, dan panggilan VoIP.
Activity adalah komponen dasar aplikasi Android yang mewakili satu layar. Activity memiliki siklus hidup yang didefinisikan dengan jelas yang dikelola oleh sistem operasi sebagai respons terhadap tindakan pengguna dan peristiwa sistem (rotasi layar, panggilan masuk, memori rendah).
| Metode | Deskripsi | Apa yang Harus Dilakukan |
|---|---|---|
| onCreate | Dipanggil sekali saat Activity dibuat | Inisialisasi UI, findViewById, pengaturan ViewModel |
| onStart | Activity menjadi terlihat | Mulai animasi, daftarkan BroadCastReceiver |
| onResume | Activity mendapatkan fokus input | Mulai kamera, sensor, animasi |
| onPause | Activity kehilangan fokus (sebagian terlihat) | Simpan draf, hentikan animasi |
| onStop | Activity tidak terlihat | Bebaskan sumber daya, hentikan pembaruan |
| onDestroy | Activity dihancurkan | Bersihkan semua referensi, berhenti berlangganan LiveData |
| onRestart | Dipanggil sebelum onStart setelah onStop | Inisialisasi ulang |
Penting: onSaveInstanceState dipanggil sebelum onStop untuk menyimpan status sementara. Pemulihan terjadi di onCreate melalui Bundle savedInstanceState atau melalui SavedStateHandle di ViewModel. Tanpa penanganan siklus hidup yang tepat, aplikasi akan kehilangan semua data yang belum disimpan saat rotasi layar.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putString("draft", draftText)
}
override fun onDestroy() {
super.onDestroy()
// Отписка от всех подписок
}
}Di Jetpack Compose, siklus hidup Activity tetap tidak berubah, tetapi Compose menyediakan alat tambahan: Komposisi sadar siklus hidup melalui LifecycleOwner, efek LifecycleEventEffect dan DisposableEffect untuk pembersihan sumber daya otomatis saat penghancuran.
Fragment di Android hidup di dalam Activity dan memiliki siklus hidup sendiri, yang sebagian tumpang tindih dengan Activity tetapi menambahkan metode baru. Fragment dapat ditambahkan, diganti, dihapus tanpa menghancurkan Activity, membuatnya lebih fleksibel tetapi juga lebih kompleks.
Metode utama Fragment Lifecycle: onAttach — Fragment dilampirkan ke Activity (panggilan pertama); onCreate — inisialisasi data; onCreateView — pembuatan View; onViewCreated — View dibuat, UI dapat dikonfigurasi; onStart — Fragment terlihat; onResume — Fragment dalam fokus; onPause — Fragment kehilangan fokus; onStop — Fragment tidak terlihat; onDestroyView — View dihancurkan; onDestroy — Fragment dihancurkan; onDetach — Fragment terlepas dari Activity.
Perbedaan utama dari Activity: onCreateView dan onDestroyView dapat dipanggil beberapa kali (misalnya, saat mengganti TabLayout), sementara onCreate dipanggil sekali. Oleh karena itu, inisialisasi View harus dilakukan di onViewCreated, bukan di onCreateView. Sumber daya yang terkait dengan View (seperti adaptor RecyclerView) harus dibersihkan di onDestroyView.
UIViewController adalah kelas dasar untuk mengelola layar di iOS. Siklus hidupnya terdiri dari serangkaian metode yang dipanggil UIKit secara otomatis. Memahami siklus ini sangat penting untuk inisialisasi UI yang benar, manajemen data, dan penanganan memori.
| Metode | Kapan Dipanggil | Penggunaan Umum |
|---|---|---|
| loadView | Saat View Controller memuat hierarki View | Inisialisasi kustom tanpa storyboard |
| viewDidLoad | Setelah View dimuat ke memori (sekali) | Pengaturan UI, memuat data awal |
| viewWillAppear | Sebelum View muncul di layar | Perbarui data, berlangganan notifikasi |
| viewDidAppear | Setelah View muncul di layar | Mulai animasi, mulai animasi pelacakan |
| viewWillDisappear | Sebelum View menghilang dari layar | Simpan status, berhenti berlangganan notifikasi |
| viewDidDisappear | Setelah View menghilang dari layar | Hentikan animasi, bebaskan sumber daya |
| dealloc | Saat View Controller dihancurkan | Bebaskan semua sumber daya |
Penting: viewDidLoad dipanggil hanya sekali dalam masa hidup View Controller. Untuk memperbarui data setiap kali tampil, gunakan viewWillAppear. Jika Anda berlangganan NotificationCenter di viewWillAppear, pastikan untuk berhenti berlangganan di viewDidDisappear untuk menghindari kebocoran memori.
SwiftUI mengelola siklus hidup View melalui struktur View. Alih-alih metode callback, SwiftUI menggunakan pengubah onAppear dan onDisappear. Untuk status aplikasi global, App Lifecycle digunakan melalui protokol App dan Scene. SwiftUI secara otomatis mengelola pembuatan dan penghancuran View berdasarkan status, yang menyederhanakan pengembangan tetapi membutuhkan pemahaman tentang identitas dan masa pakai View.
struct ContentView: View {
var body: some View {
Text("Hello")
.onAppear {
print("View появилась")
}
.onDisappear {
print("View исчезла")
}
}
}LifecycleOwner adalah antarmuka dari Android Architecture Components yang menandai objek yang memiliki siklus hidup (Activity, Fragment). LifecycleObserver adalah antarmuka yang memungkinkan objek untuk berlangganan peristiwa LifecycleOwner. Bersama-sama mereka membentuk dasar manajemen siklus hidup reaktif dalam pengembangan Android modern.
Alih-alih memanggil metode secara eksplisit di onStart/onStop, disarankan untuk menggunakan DefaultLifecycleObserver (pengganti LifecycleObserver yang sudah tidak digunakan lagi dengan anotasi @OnLifecycleEvent). Ini adalah pendekatan yang dipromosikan Google untuk ViewModel dan komponen lain yang perlu bereaksi terhadap siklus hidup tanpa memiliki referensi langsung ke Activity atau Fragment.
class MyObserver : DefaultLifecycleObserver {
override fun onStart(owner: LifecycleOwner) {
// Подписка на обновления
}
override fun onStop(owner: LifecycleOwner) {
// Отписка
}
}Di IT Sectr, kami menggunakan LifecycleOwner di semua proyek Android. ViewModel berlangganan LifecycleOwner Activity melalui viewModelScope dan lifecycleScope, menjamin pembatalan otomatis coroutine saat Activity dihancurkan. Ini mencegah kebocoran memori dan membuat kode lebih bersih dan aman.
Pertanyaan Umum
Activity melewati enam status: Created (onCreate), Started (onStart), Resumed (onResume), Paused (onPause), Stopped (onStop), Destroyed (onDestroy).
Urutan: loadView → viewDidLoad → viewWillAppear → viewDidAppear → viewWillDisappear → viewDidDisappear. viewDidLoad dipanggil sekali.
LifecycleOwner adalah komponen Android Architecture Components yang memiliki siklus hidup Activity atau Fragment. Memungkinkan berlangganan peristiwa melalui LifecycleObserver.
Aplikasi iOS melewati lima status: Not Running, Inactive, Active, Background, Suspended. Transisi dikelola melalui UIApplicationDelegate.
Saved State adalah mekanisme Android untuk mempertahankan status Activity/Fragment saat rotasi layar atau pembuatan ulang proses. Menggunakan onSaveInstanceState dan SavedStateHandle.
Ringkasan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.