Activity — kullanıcı arayüzüne sahip tek bir ekranı temsil eden temel bir Android uygulama bileşenidir. Sistem, katı bir yaşam döngüsü (onCreate, onResume ve onDestroy geri çağrımları) aracılığıyla ekranları yönetir. Her Activity AndroidManifest.xml'de bildirilir ve Intent aracılığıyla başlatılır. Android'in geçmişi hakkında daha fazla bilgiyi Google'ın resmi belgelerinde okuyun.
Önemli Noktalar
Activity — kullanıcıyla etkileşim için bir pencere sağlayan ana Android uygulama bileşenidir. Her Activity ayrı bir ekranı yönetir: görev listesi, giriş formu, fotoğraf görüntüleyici. Android sistemi talep üzerine bir Activity oluşturur ve diğer uygulamaların belleğe ihtiyacı olduğunda onu yok eder.
Activity ilk olarak Android 1.0'da (2008) ortaya çıktı ve arayüzün ana yapı taşı olmaya devam ediyor. Google'a (2026) göre, Google Play'deki uygulamaların %98'i en az bir Activity içeriyor. Modern mimaride Google, birden çok Fragment ile tek bir Activity önermektedir, ancak klasik çok ekranlı uygulama yaygın bir uygulama olmaya devam etmektedir.
Activity stack (back stack) — gezinme geçmişini depolayan görev yığınıdır. Kullanıcı "Geri"ye bastığında, mevcut Activity yok edilir ve bir önceki geri yüklenir. Sistem yığını otomatik olarak yönetir, ancak geliştirici launchMode ve Intent bayrakları aracılığıyla davranışı kontrol edebilir.
Activity yaşam döngüsü, bir ekranın oluşturulmadan yok edilmeye kadar geçtiği durumlar ve geri çağrımlar kümesidir. Lifecycle'ı anlamak kritik öneme sahiptir: yanlış durum yönetimi bellek sızıntılarına, veri kaybına ve uygulama çökmelerine yol açar.
Android sistemi geri çağrımları katı bir sırayla çağırır. Geliştirici, kaynakları başlatmak, verileri kaydetmek ve belleği serbest bırakmak için gerekli yöntemleri geçersiz kılar. Her geri çağrımın bir karşılık gelen çifti vardır: onCreate ↔ onDestroy, onStart ↔ onStop, onResume ↔ onPause.
| Geri Çağrım | Amaç | Geliştirici Eylemi |
|---|---|---|
| onCreate | Activity oluşturulurken çağrılır | UI başlatma, ViewModel'e abone olma |
| onStart | Activity görünür hale gelir | Animasyonları, kamerayı, GPS'i başlatma |
| onResume | Activity giriş odağını alır | Video, zamanlayıcıları sürdürme |
| onPause | Activity odağı kaybeder | Taslakları kaydetme, animasyonları durdurma |
| onStop | Activity başka bir ekran tarafından gizlenir | Ağır kaynakları serbest bırakma |
| onDestroy | Activity yok edilir | Abonelikleri temizleme, Closeable |
Activitynin dört durumu vardır: Running (onResume aktif), Paused (görünür ancak odaksız), Stopped (görünmez), Destroyed (yok edilmiş). Sistem, bellek yetersiz olduğunda Stopped durumundaki bir Activity'yi sonlandırabilir — veriler onSaveInstanceState'da kaydedilmelidir.
Bir Kotlin örneği ile Activity yaşam döngüsünün üç ana yöntemini inceleyelim. onCreate — giriş noktasıdır, bir kez çağrılır. Burada setContentView aracılığıyla düzen bağlama, RecyclerView başlatma, LiveData'ya abone olma gerçekleşir. onStart — Activity kullanıcıya görünür hale gelir. onResume — Activity odağı alır ve etkileşime hazır hale gelir.
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()
}
}Örnekte, onCreate RecyclerView'i başlatır ve verileri yükler. onStart coğrafi konum güncellemelerini başlatır — yalnızca ekran görünürken çalışması gereken bir kaynak. onResume, onPause'da duraklatılan videoyu sürdürür. Bu ayrım, gereksiz arka plan çalışmasını önler.
Her Activity AndroidManifest.xml dosyasında bildirilmelidir. Kayıt olmadan, sistem ekranı bulamaz ve ActivityNotFoundException istisnası fırlatır. Manifest'te sınıf adı, tema, yönlendirme, launchMode ve Intent filtreleri belirtilir.
<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>exported bayrağı, diğer uygulamaların Activity'yi başlatıp başlatamayacağını belirler. Ana ekran için exported=true, iç ekranlar için — false. parentActivityName özelliği standart "Yukarı" gezinmeyi (Up Navigation) etkinleştirir.
Intent — gerçekleştirilecek eylemi tanımlayan bir nesnedir. Activity bağlamında Intent, veri aktarımıyla başka bir ekranı başlatmak için kullanılır. Intent açık (belirli bir sınıfı belirtir) ve örtük (bir eylem belirtir, sistem uygun bileşeni seçer) olabilir.
// Açık Intent — DetailActivity'yi verilerle başlatma
val intent = Intent(this, DetailActivity::class.java).apply {
putExtra("item_id", itemId)
putExtra("item_name", itemName)
}
startActivity(intent)
// DetailActivity'de veri alma
val itemId = intent.getLongExtra("item_id", 0L)
val itemName = intent.getStringExtra("item_name") ?: ""Başlatılan bir Activity'den sonuç almak için, kullanımdan kaldırılan startActivityForResult'ın yerini alan Activity Result API kullanılır. Yeni API tür güvenlidir, bildirime dayalıdır ve Jetpack Compose ile çalışır.
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)
}Ekran döndürme veya yapılandırma değişikliği sırasında Android, Activity'yi yeniden oluşturur — sırayla onDestroy ve onCreate'i çağırır. Durum kaydedilmezse, kullanıcı girilen verileri, kaydırma konumunu ve seçili öğeleri kaybeder. Android bu sorunu çözmek için iki mekanizma sağlar: onSaveInstanceState ve ViewModel.
onSaveInstanceState, onDestroy çağrılmadan önce Bundle'da basit verileri kaydeder. Jetpack'ten ViewModel, Activity yeniden oluşturulmasına dayanır ve verileri bellekte depolar; bu, karmaşık nesneler ve ağ istekleri için daha verimlidir.
class MainActivity : AppCompatActivity() {
private val viewModel: MainViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// ViewModel verileri otomatik olarak kaydeder
viewModel.items.observe(this) { items ->
updateAdapter(items)
}
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putInt("scroll_position", recyclerView.computeVerticalScrollOffset())
}
}Google'ın modern yaklaşımı, tek bir Activity ve birden çok Fragment ile Single Activity mimarisidir. Uygulama bir MainActivity kullanır ve tüm gezinme, NavHostFragment aracılığıyla Navigation Component tarafından yönetilir. Avantajları: merkezi gezinme, ekran başına paylaşılan ViewModel, doğru Deep Links işleme.
Jetpack Navigation Component, geri yığın yönetimini, geçiş animasyonlarını ve argüman iletimini otomatikleştirir. NavHostFragment, Activity düzenine yerleştirilir ve gezinme grafiği (NavGraph) tüm ekranları ve aralarındaki bağlantıları tanımlar. Bu yaklaşım, Google tarafından yeni projeler için önerilir ve Material Design ilkelerini izler.
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)
// AppBar için NavigationUI kurulumu
setupActionBarWithNavController(navController)
}
override fun onSupportNavigateUp() =
navController.navigateUp() || super.onSupportNavigateUp()
}Sıkça Sorulan Sorular
Activity — kendi yaşam döngüsüne sahip tam teşekküllü bir uygulama ekranıdır. Fragment — Activity içindeki UI'nin bir parçasıdır, Activity yeniden oluşturulmasına dayanır ve onun Lifecycle'ına bağlıdır. Activity zorunludur, Fragment isteğe bağlıdır.
Sınır yoktur. Her ekran genellikle ayrı bir Activity temsil eder. Basit bir uygulama için bir tane yeterlidir, çok ekranlı uygulamalar için — 5 ila 20. Google, birden çok Fragment ile tek bir Activity önerir.
launchMode, bir Activity'nin görev yığınında nasıl oluşturulacağını belirler. Dört mod: standard (yeni bir örnek oluşturulur), singleTop, singleTask (görev başına bir örnek) ve singleInstance (izole görev). Mod AndroidManifest.xml'de ayarlanır.
Intent aracılığıyla — ilkelleri, dizeleri, Parcelable veya Serializable içerebilen extras (putExtra) içeren bir nesne. Geri bildirim için Activity Result API kullanılır — startActivityForResult'ın modern tür güvenli bir yedeği.
Configuration Change — yapılandırma değişikliğinde (ekran döndürme, dil değişikliği, klavye) Activity'nin yeniden oluşturulmasıdır. Sistem onDestroy → onCreate'i çağırır. Verileri kaydetmek için onSaveInstanceState veya Jetpack'ten ViewModel kullanın.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun