Activity — komponen dasar aplikasi Android yang mewakili satu layar dengan antarmuka pengguna. Sistem mengelola layar melalui siklus hidup yang ketat — callback onCreate, onResume dan onDestroy. Setiap Activity dideklarasikan di AndroidManifest.xml dan diluncurkan melalui Intent. Baca lebih lanjut tentang sejarah Android di dokumentasi resmi Google.
Poin utama
Activity — komponen kunci aplikasi Android yang menyediakan jendela untuk interaksi dengan pengguna. Setiap Activity mengelola layar terpisah: daftar tugas, formulir masuk, tampilan foto. Sistem Android membuat Activity berdasarkan permintaan dan menghancurkannya ketika memori diperlukan untuk aplikasi lain.
Activity pertama kali muncul di Android 1.0 (2008) dan tetap menjadi blok bangunan utama antarmuka. Menurut Google (2026), 98% aplikasi di Google Play mengandung setidaknya satu Activity. Dalam arsitektur modern, Google merekomendasikan satu Activity dengan banyak Fragment, namun aplikasi multi-layar klasik tetap menjadi praktik yang umum.
Activity stack (back stack) — tumpukan tugas yang menyimpan riwayat navigasi. Ketika pengguna menekan „Kembali“, Activity saat ini dihancurkan dan yang sebelumnya dipulihkan. Sistem mengelola tumpukan secara otomatis, tetapi pengembang dapat mengontrol perilaku melalui launchMode dan flag Intent.
Siklus hidup Activity — kumpulan status dan callback yang dilalui layar dari pembuatan hingga penghancuran. Memahami Lifecycle sangat penting: bekerja dengan status yang salah menyebabkan kebocoran memori, kehilangan data, dan crash aplikasi.
Sistem Android memanggil callback dalam urutan yang ketat. Pengembang menimpa metode yang diperlukan untuk menginisialisasi sumber daya, menyimpan data, dan membebaskan memori. Setiap callback memiliki pasangan: onCreate ↔ onDestroy, onStart ↔ onStop, onResume ↔ onPause.
| Callback | Tujuan | Tindakan pengembang |
|---|---|---|
| onCreate | Dipanggil saat Activity dibuat | Inisialisasi UI, berlangganan ViewModel |
| onStart | Activity menjadi terlihat | Memulai animasi, kamera, GPS |
| onResume | Activity mendapatkan fokus input | Melanjutkan video, timer |
| onPause | Activity kehilangan fokus | Menyimpan draf, menghentikan animasi |
| onStop | Activity disembunyikan oleh layar lain | Membebaskan sumber daya berat |
| onDestroy | Activity dihancurkan | Membersihkan langganan, Closeable |
Empat status Activity dibedakan: Running (onResume aktif), Paused (terlihat tetapi tanpa fokus), Stopped (tidak terlihat), Destroyed (dihancurkan). Sistem dapat mematikan Activity dalam status Stopped saat kekurangan memori — data harus disimpan di onSaveInstanceState.
Mari kita bahas tiga metode kunci dari siklus hidup Activity dengan contoh di Kotlin. onCreate — titik masuk, dipanggil sekali. Di sini terjadi pengikatan layout melalui setContentView, inisialisasi RecyclerView, berlangganan LiveData. onStart — Activity menjadi terlihat bagi pengguna. onResume — Activity mendapatkan fokus dan siap untuk berinteraksi.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val recyclerView = findViewById<RecyclerView>(R.id.rv_items)
recyclerView.layoutManager = LinearLayoutManager(this)
loadItems()
}
override fun onStart() {
super.onStart()
startLocationUpdates()
}
override fun onResume() {
super.onResume()
resumeVideoPlayer()
}
}Dalam contoh, onCreate menginisialisasi RecyclerView dan memuat data. onStart memulai pembaruan geolokasi — sumber daya yang hanya boleh bekerja saat layar terlihat. onResume melanjutkan video yang dihentikan di onPause. Pemisahan seperti ini mencegah pekerjaan yang tidak perlu di latar belakang.
Setiap Activity harus dideklarasikan di file AndroidManifest.xml. Tanpa pendaftaran, sistem tidak akan menemukan layar dan akan melempar pengecualian ActivityNotFoundException. Di manifes ditentukan nama kelas, tema, orientasi, launchMode dan filter Intent.
<application
android:allowBackup="true"
android:label="@string/app_name"
android:theme="@style/Theme.MyApp">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".DetailActivity"
android:parentActivityName=".MainActivity" />
</application>Bendera exported menentukan apakah aplikasi lain dapat meluncurkan Activity. Untuk layar utama exported=true, untuk layar internal — false. Atribut parentActivityName mengaktifkan navigasi standar „Ke atas“ (Up Navigation).
Intent — objek yang menggambarkan tindakan yang akan dilakukan. Dalam konteks Activity, Intent digunakan untuk meluncurkan layar lain dengan transfer data. Intent bisa eksplisit (menunjuk ke kelas tertentu) dan implisit (menunjuk ke tindakan, sistem memilih komponen yang sesuai).
// Intent eksplisit — meluncurkan DetailActivity dengan data
val intent = Intent(this, DetailActivity::class.java).apply {
putExtra("item_id", itemId)
putExtra("item_name", itemName)
}
startActivity(intent)
// Menerima data di DetailActivity
val itemId = intent.getLongExtra("item_id", 0L)
val itemName = intent.getStringExtra("item_name") ?: ""Untuk menerima hasil dari Activity yang diluncurkan digunakan Activity Result API, yang menggantikan startActivityForResult yang sudah usang. API baru ini type-safe, deklaratif, dan bekerja dengan Jetpack Compose.
private val getResult = registerForActivityResult(
ActivityResultContracts.StartActivityForResult()
) { result ->
if (result.resultCode == Activity.RESULT_OK) {
val data = result.data?.getStringExtra("result_key")
}
}
fun openPicker() {
val intent = Intent(this, PickerActivity::class.java)
getResult.launch(intent)
}Saat rotasi layar atau perubahan konfigurasi, Android membuat ulang Activity — secara berurutan memanggil onDestroy dan onCreate. Tanpa menyimpan status, pengguna kehilangan data yang dimasukkan, posisi scroll, dan elemen yang dipilih. Untuk mengatasi masalah ini Android menyediakan dua mekanisme: onSaveInstanceState dan ViewModel.
onSaveInstanceState menyimpan data sederhana di Bundle sebelum memanggil onDestroy. ViewModel dari Jetpack tahan terhadap pembuatan ulang Activity dan menyimpan data di memori, yang lebih efisien untuk objek kompleks dan permintaan jaringan.
class MainActivity : AppCompatActivity() {
private val viewModel: MainViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// ViewModel secara otomatis menyimpan data
viewModel.items.observe(this) { items ->
updateAdapter(items)
}
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putInt("scroll_position", recyclerView.computeVerticalScrollOffset())
}
}Pendekatan modern Google — arsitektur Single Activity dengan satu Activity dan banyak Fragment. Aplikasi menggunakan satu MainActivity, dan seluruh navigasi dilakukan oleh Navigation Component melalui NavHostFragment. Keuntungan: navigasi terpusat, ViewModel bersama per layar, kerja yang benar dengan Deep Links.
Jetpack Navigation Component mengotomatiskan kerja dengan back stack, animasi transisi, dan pengiriman argumen. NavHostFragment ditempatkan di layout Activity, dan grafik navigasi (NavGraph) menggambarkan semua layar dan koneksi di antaranya. Pendekatan ini direkomendasikan oleh Google untuk proyek baru dan sesuai dengan prinsip Material Design.
class MainActivity : AppCompatActivity() {
private val navController by lazy {
findViewById<NavHostFragment>(R.id.nav_host_fragment)
.navController
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Konfigurasi NavigationUI untuk AppBar
setupActionBarWithNavController(navController)
}
override fun onSupportNavigateUp() =
navController.navigateUp() || super.onSupportNavigateUp()
}Pertanyaan yang sering diajukan
Activity — layar aplikasi penuh dengan siklus hidupnya sendiri. Fragment — bagian dari UI di dalam Activity yang tahan terhadap pembuatan ulang Activity dan bergantung pada Lifecycle-nya. Activity wajib, Fragment opsional.
Tidak ada batasan. Setiap layar biasanya mewakili Activity terpisah. Untuk aplikasi sederhana satu cukup, untuk multi-layar — dari 5 hingga 20. Google merekomendasikan satu Activity dengan banyak Fragment.
launchMode menentukan bagaimana Activity dibuat di tumpukan tugas. Empat mode: standard (instance baru dibuat), singleTop, singleTask (satu instance dalam tugas) dan singleInstance (tugas terisolasi). Mode diatur di AndroidManifest.xml.
Melalui Intent — objek dengan ekstra (putExtra) yang menampung primitif, string, Parcelable atau Serializable. Untuk umpan balik digunakan Activity Result API — pengganti modern type-safe untuk startActivityForResult.
Configuration Change — pembuatan ulang Activity saat perubahan konfigurasi (rotasi layar, perubahan bahasa, keyboard). Sistem memanggil onDestroy → onCreate. Untuk menyimpan data digunakan onSaveInstanceState atau ViewModel dari Jetpack.
Kesimpulan
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.
Baca juga