Android Processes andThreads
starts App
Service
Broadcast
Receiver
Content
Provider
Activity
Bir uygulama 4 komponente sahip oluyor.
3.
Android Processes andThreads
App
Activity
Service
Broadcast
Receiver
Content
Provider
Durum 1 : Hiç bir komponent çalışmıyor ise;
Activity
main thread
Yeni bir Linux Process oluşturuluyor
Durum 2 : Başka komponent çalışıyor ise;
Activity
main thread
Mevcut Linux Process
Service
4.
Android Processes andThreads
Manifest altından hangi komponenti kullanmak istiyor isek bunu belirtmemiz gerekiyor.
Farklı uygulamaların komponentleri aynı process altında çalıştırılabilir. Fakat;
Aynı Linux User Id’yi paylaşmaları gerekiyor.
Aynı sertifika ile imzalanmış olmaları gerekiyor.
Memory’nin yetersiz kaldığı durumlarda process sonlandırılabilir.
<service android:name=".CustomService"></service>
5.
Android hangi process’isonlandırmalı?
Activity
main thread
Process 1
Activity Activity
main thread
Process 2
Activity
Kullanıcı ile etkileşimde değil Kullanıcı ile etkileşimde
Android sistemi kullanıcıyı da dikkate alarak process’leri (önemlilik seviyelerine göre) önceliklendiriyor.
Örneğin sms uygulamasında mesaj yazıyor
6.
Process’lerin Öncelik Seviyeleri
En düşük seviyeli process önce sonlandırılır.
Foreground Process [Highest Importance]
onResume() metodu,
Service çalışıyor iken lifecycle metodlarına erişim,
BroadcastReceiver’da onReceive metodunun çalıştırılması.
Visible Process [2. Highest Importance]
onPause() metodu (örnek bir anda "arama" gelmesi)
Görünür activity’e bağlı bir servisin çağrılması
7.
Process’lerin Öncelik Seviyeleri
Service Process [3. Highest Importance]
Burada kullanıcı doğrudan etkileşimde değil,
Arkaplanda çalışan bir servis. (örneğin müzik uygulaması)
Background Process [2. Lowest Importance]
Kullanıcı ile etkileşimde değil
Kullanıcı ile en son etkileşimde olan process en son kapatılır.
Empty Process [Lowest Importance]
Hiç bir komponent çalışmıyor
Fakat uygulamaya tekrar erişmek istendiğinde hızlı erişim için cache tutuyor.
8.
Process’lerin Öncelik Seviyeleri
Bilgilendirme;
Birresim indirme işlemi için 2 farklı yol seçilebilir.
1. yol bir servis çalıştırarak indirmek
2. yol yeni bir thread oluşturarak indirmek
Burada yeni bir thread oluşturarak yaparsak Background Process [2. Lowest
Importance] seviyesinde işlemini gerçekleştirir. Fakat Service ile yaptırırsak Service
Process [3. Highest Importance] seviyesine çeker. Böylece service ile önem
derecesini arttırmış oluruz.
9.
The App Sandbox
Process
Storage
AppSandbox
App User Id
Process
Storage
App Sandbox
App User Id
• Uygulamayı yüklerken her
uygulama için unique olarak
AppUserId ataması yapılıyor.
• Her uygulama paketi bir linux
process’i olarak çalışır.
• Farklı uygulama paketleri tek bir
process’in parçaları olarak çalışabilir
veya başka bir uygulama ile data
paylaşımı yapıyor ise 2 ayrı process
olarak da çalışabilir. Bu da
android:shareUserId ataması ile
yapılabilir. (Burada 2 process’inde
aynı sertifika ile imzalanması
gerekiyor.)
• 2 uygulamada birbiririn datalarına
erişebilir.
Android Thread Mekanizması
Activity
Service
Broadcast
Receiver
Content
Provider
M1M2Main Thread
doğrucamainthread
• UI kontrollere main thread
üzerinden müdahale
edilebilir.
• Bir butona bastığımızda
mesaj doğruca main
thread’da gönderilir.
• BroadcastReceiver’dan
tetiklenen event’ler main
thread’a gönderilir.
• startService() ve servis
içindeki kodlar main
thread’da işlenir.
13.
Uzun süren işlemler;
•Network istekleri veya database sorguları ui thread’ın belirli bi süre bekletilmesine sebeb
olur.
• UI thread beklediğinde event’ler tetiklenmez. Çizim eventleride tetiklenmediği için ekran
donar.
• Main thread’da bulunmaması gereken işlemlerden bazıları;
• Dosyalarla çalışmak
• Network işlemleri
• Kompleks hesaplamalar
• Tüm bunların yanında background thread’lerde ui üzerinde işlemler yapamaz.
14.
Android Thread Mimarisi
ActivityService
Broadcast
Receiver
Content
Provider
M1 M2
Main Thread/
Looper
Android Process 1
External
Components
Call Activities/
Broadcast Receivers
Thread pool
T1 T2
Call content
providers/ services
15.
Bazı thread metodları;
•Activity;
• void runOnUiThread(Runnable runnable);
• Eğer mevcut thread UI Thread ise yapılan aksiyon hemen çalıştırılır.
• Eğer mevcut thread UI Thread değil ise istenilen aksiyon UI Thread’da kuyruğa
gönderilir.
16.
Bazı thread metodları;
•View;
• boolean post(Runnable runnable);
• Çalıştırılır kod kuyruğa eklenir ve mevcut thread ui thread olduğunda bu kod çalıştırılır.
• Sonuç olarak true döner ise kuyruğa doğru bir şekilde eklenmiş demektir. False döner
ise kuyruğa eklerken hata oluşmuş ve eklenememiş demektir.
• boolean postDelayed(Runnable runnable, long delayMilliseconds);