← Blog'a Dön

Android’de Process Nedir?

Android’de Process Nedir?

Her Uygulama Kendi Adacığında Yaşar

Telefonunuzda aynı anda onlarca uygulama yüklü. Müzik çalar arka planda çalışıyor, mesajlaşma uygulaması bildirim bekliyor, tarayıcıda sekmeler açık duruyor. Ama bunların hiçbiri birbirinin verisine erişemiyor, birbirinin çalışmasını doğrudan etkileyemiyor.
Bu izolasyonu sağlayan temel mekanizma process’tir.

Process Nedir?

Process, işletim sisteminin bir uygulamaya tahsis ettiği bağımsız çalışma ortamıdır. Her process’in kendine ait bellek alanı, kendine ait kaynakları ve kendine ait yaşam döngüsü vardır.
Android’de her uygulama varsayılan olarak kendi process’inde çalışır. Bu process, uygulama ilk başlatıldığında Zygote tarafından fork edilerek oluşturulur. Uygulama kapandığında ya da sistem tarafından öldürüldüğünde bu process de sona erer.
Process izolasyonu şu anlama gelir: Bir uygulamanın process’i çökerse diğer uygulamalar bundan etkilenmez. Bankacılık uygulamanızın verileri, aynı telefonda çalışan başka bir uygulamanın bellek alanına sızmaz. Bu hem güvenliğin hem de kararlılığın temelidir.

Linux ve Android Process İlişkisi

Android, process yönetimi için doğrudan Linux çekirdeğine dayanır. Linux’ta her process’e benzersiz bir PID (Process ID) atanır. Android bu mekanizmanın üzerine kendi katmanını inşa etmiştir.
Her Android uygulamasına aynı zamanda benzersiz bir Linux kullanıcı kimliği (UID) atanır. Bu UID sayesinde bir uygulamanın dosyaları, bellek alanı ve sistem kaynakları diğer uygulamalardan izole edilir. İzin sistemi de bu UID üzerine inşa edilmiştir — bir uygulama yalnızca kendi UID’sine izin verilmiş kaynaklara erişebilir.

Bir Uygulamanın Birden Fazla Process’i Olabilir

Android, tek bir uygulamanın birden fazla process çalıştırmasına izin verir. Manifest dosyasında bir bileşenin android:process özelliğini ayarlayarak belirli bir Service ya da Activity’yi farklı bir process’te çalıştırabilirsiniz.
Bu neden faydalıdır? Büyük ve karmaşık uygulamalarda bazı işler ana process’ten izole edilmek istenir. Örneğin ağır bir veri işleme servisi ayrı bir process’te çalıştırılırsa ana process’in çökmesiyle bu servis etkilenmez. Ya da bellek yoğun bir bileşen ayrı bir process’e alınırsa ana process’in belleği daha temiz kalır.
Ancak bu yaklaşım beraberinde karmaşıklık da getirir. Farklı process’ler arasında doğrudan bellek paylaşımı mümkün değildir. Veri alışverişi için IPC (Inter-Process Communication) mekanizmaları kullanılmak zorundadır.

IPC: Process’ler Arası İletişim

Farklı process’ler birbirleriyle nasıl konuşur? Android bunun için Binder adlı özel bir IPC mekanizması geliştirilmiştir.
Binder, Android’e özgü ve son derece verimli bir süreçler arası iletişim altyapısıdır. Sistem servislerinin büyük bölümü Binder üzerinden çalışır. startActivity, startService, getSystemService gibi çağrılar arka planda Binder mekanizmasını kullanır.
Geliştiriciler Binder’ı doğrudan kullanmak yerine genellikle AIDL (Android Interface Definition Language) aracılığıyla erişir. AIDL, farklı process’lerin birbirinin metotlarını sanki aynı process içindeymiş gibi çağırabilmesini sağlayan bir sözleşme dilidir.

Process Öncelik Sıralaması

Android, tüm process’leri bir öncelik sıralamasına göre değerlendirir ve bellek baskısı arttığında bu sıralamaya göre process’leri sonlandırır. Bu konuyu daha önce detaylıca ele almıştık — Low Memory Killer tam olarak bu sıralamayı kullanır.
Kısaca hatırlatmak gerekirse: Ön planda aktif olan process en korunaklıdır, boş bekleyen process’ler ise ilk önce öldürülür.

Geliştirici Perspektifinden Bakış

Process kavramını anlamak birkaç önemli geliştirme kararını doğrudan etkiler.
Uygulama bileşenlerinizi farklı process’lere ayırırken bu kararın IPC maliyeti getireceğini hesaba katmanız gerekir. Process sınırını aşan her veri transferi serileştirme ve Binder geçişi gerektireceğinden performansa yansır.
Crash raporlarını analiz ederken hangi process’in çöktüğünü tespit etmek sorunun kaynağını bulmayı hızlandırır. Ana process mi yoksa arka plan servisi mi çökmüş, bu ayrım teşhiste kritik öneme sahiptir.