29 Aralık 2024 Pazar

Android Uygulamalarında Aktivite Başlatma Modları (Launch Modes)

Android Uygulamalarında Aktivite Başlatma Modları (Launch Modes)

Android uygulamalarında karşımıza çıkan aktivitelerin başlatma modlarından bahsedeceğim. Öncelikle Android sisteminde "task" nedir buna bakarsak, tasklar bir veya birden fazla aktivitenin bulunduğu aktiviteler topluluğu olarak tanımlanabilir. Tasklar bir yığın (stack) üzerinde tutulur ve yeni bir aktivite oluşturulduğunda bu aktivite yığının en sonuna eklenir. Android'in bu yapısı LIFO (Last In, First Out) mantığı ile çalışır.

Bir aktivitenin başlatma modu, bu aktivitenin diğer aktivitelerle olan ilişkisini ve davranışını tanımlar. Android'de toplamda 5 adet başlatma modu bulunur ve bu modlar, manifest dosyasında aktivite içerisinde launchMode "attribute" ile tanımlanır. 


1. Standard Mode (Varsayılan Mod)

Bu mod varsayılan olarak gelir. Yeni bir aktivite başlatıldığında her zaman yeni bir kopya oluşturulur ve yığının en üstünü eklenir.

Örnek: Eğer yığında A ve B aktiviteleri varsa ve B'yi tekrar başlatırsak, yeni bir B kopyası oluşturulur ve yığın şu hale gelir:

A → B → B (yeni kopya)


2. SingleTop Mode

Bu mod, başlatılmak istenen aktivitenin yığının en üstünde olması durumunda yeni bir kopya oluşturmaz. Bunun yerine mevcut aktiviteye yeni bir Intent gönderir ve onNewIntent() metodu çalışır. Ancak, aktivite yığının en üstünde değilse yeni bir kopya oluşturulur.

Örnek:

  • Yığında şu aktiviteler olsun: A → B → C.

  • Eğer C tekrar başlatılırsa yeni bir kopya oluşturulmaz.

  • Ancak C yerine B tekrar başlatılırsa yığın şu hale gelir:

A → B → C → B (yeni kopya)


3. SingleTask Mode

Bu mod, aktivitenin yığında zaten mevcut olup olmadığını kontrol eder. Aktivite yığında mevcutsa, bu aktivitenin üzerindeki tüm aktiviteler temizlenir ve söz konusu aktivite öne getirilir.

Örnek:

  • Yığın: A → B → C → D.

  • Eğer B başlatılırsa, yığın şu hale gelir:

A → B


4. SingleInstance Mode


Bu mod singleTask modu gibi çalışır, fakat aradaki fark aktivitenin yeni bir taskta oluşturulmasıdır. Oluşan bu aktivitenin bulunduğu task, başka bir aktivite içeremez.

Örnek:

  • Yığın:

Task 1: A → B → C
Task 2: D
  • Eğer D tekrar başlatılırsa, yeni bir kopya oluşturulmaz ve mevcut D kullanılır.


5. SingleInstancePerTask Mode

Bu mod, SingleInstance modundan farklı olarak, aynı aktivitenin farklı tasklarda yeniden oluşturulmasına izin verir. Bu sayede her bir task içerisinde aynı aktivitenin farklı kopyaları bulunabilir.





30 Aralık 2019 Pazartesi

SOLID - D : Dependency Inversion Principle

Butun projelerde maalesef ust sinif nesneler ve alt sinif nesneler birbiri ile bagimlidir , ve biz alt sinif nesnede bir degisiklige gittigimizde bu buna bagimli olan ust sinif nesnelerimizi de  etkiler.Bu basimiza buyuk sorunlar acabilir.Iste bagimliliklarin terslenmesi ile bu soruna cozum bulunmaya calisilmistir.Ust sinif ile alt sinif arayuzler yardimiyla baglandiginda cok daha iyi bir yapi kurulabilir.
























Goruldugu gibi burada Phone sinifi veritabanindan bilgi ceken sinifa bagimli bir durumda bunu nasil DIP prensibine uygun hale getirebiliriz?










































Arayuz olusturulup bunu PhoneDatabase sinifina implement edildi.Bu arayuz kullanildi.Phone sinifinin son hali yukaridaki gibidir.

27 Aralık 2019 Cuma

SOLID - I : Interface Segregation Principle

Bir sinifa arayuzu implement ettigimizde o arayuzun tum metotlarini da implement etmis oluyoruz ve bu o sinifin bazi fonksiyonlara ihtiyaci yoksada orada olmak zorunda.Iste burada bizim tasarimimizda o arayuzu parcalara bolerek gereksiz kullanimin onune gecmis oluruz.


Soyle bir muzik baglanti arayuzu olsun.












Bir Hoparlor sinifimiz bunu implement ettiginde tum baglantilari yapabiliyor.














 Yeni bir BluetoothHoparlor geldi ve baglanti gerekiyor.Buna da arayuzu implemet ediyoruz ama bir sorun var; bu hoparlorde rca girisi olmadigindan o metodu bos birakmak zorundayiz.









Hersey cok iyiyken MuzikSeti sinifi geldi MuzikSeti sadece rca ile baglanabiliyor.Diger iki metot bos kaldi.Hal boyle olunca arayuzde bir degisiklige gitmeliyiz .Arayuzu ayirmak.
Uc farkli arayuz olusturalim.











Uc ayri arayuze bolduk.













Siniflarin son hali asagidaki gibi olmustur.
































SOLID - L : Liskov Substitution Principle

Bu prensipte alt siniftan olusan nesnelerin ust siniftaki ile yer degistirildiginde ayni tepkiyi vermesi beklenmektedir.Asagidaki gibi siniflar olsun;



Soyut sinif









Ev telefonunun fotograf cekme ozelligi olmadigindan hata firlatiyor.















Burada t2 icin hersey sorunsuz ama t1 nesnesi icin isler pek iyi gitmiyor.Cunku bize hata firlatacak bu istemedigimiz birsey.Ust sinifiyla ayni tepkiyi veremedi.








Fotograf cekmeyi interface ile ayirip, soyut siniftan da metodu kaldirip  AkilliTelefon sinifina arayuzu ipmlement etmeliyiz.







26 Aralık 2019 Perşembe

SOLID - O : Open Closed Principle

Open Closed Principle`nin amaci sistemin degisime kapali ama gelismeye acik olmasidir.Nedir bu?
Yazilimin surekli sabit kalmasi pek olasi birsey olmayabilir, iste bu sebeple yeni eklentiler yeni ozellikler eklenmek istenebilir , ama eklerken onceden yazdigimiz yerlerin degismesini istemeyiz burdaki degisim budur.OPC`nin dedigi gelisme; yeni ekledigimiz kisimlar oyle olmali ki yerine direk oturmalidir eski siniflarimizda degisiklik olmadan yeni ozellikler icin yeni kodlar ekleyerek gelisimi saglamamiz.Bir ornekle durumu anlasir kilalim.




Burdaki gibi bir yapimiz olsun market, ogrenci olanlara bir indirim uygulasin.Bir sure sonra ogretmen olanlara da bir indirim uygulanmak istensin.







Yeni ekleyecegimiz Ogretmen sinifini olusturduk buraya kadar bir problem yok.






Ama burada indirim hesalayan eski sinifimizi da degistirmek zorunda kaldik.Bu degisime kapali gelisime acik prensibine uymayan, bizimde istemedigimiz birsey.



Bunun icin soyut Profil sinifini olusturduk ve diger siniflarimizi buradan turettik.

















Indirim sinifimizdaki metodun parametresinide Profil tipinde kullandigimizda , artik her yeni gelen durum icin , ornegin doktor icin bir indirimde bu sinif etkilenmeyecek sadece yeni ekledigimiz sinifi soyut siniftan turetip metodunu doldurmamiz yeterli olacaktir.
Not :Interface ile de bunu uygulayabilirdik.







SOLID - S : Single Responsibility Principle

Bu prensipte amac yazilimimizdaki bilesenlerimizin sadece bir tane sorumlulugu yerine getirmesi.Bilesenler;  siniflar, metotlar olabilir.Yani ornegin ogrenci bilgileri icin bir sinifimiz olsun burada veri kaydetme islemi yapmak tek sorumluluk prensibine aykiridir, Ogrenci sinifiyla yuksek bagliligi olmayan durumlarda bunu baska siniflar halletmelidir.


































Yapiyi su sekilde degistirirsek;

















Ogrenci sinifinin son hali boyle olacaktir.

13 Mart 2017 Pazartesi

Orm(Object Relational Mapping) nedir?

Orm nedir?

Normalde veritabanı sistemleri uygulama ve bir veritabanı ile birlikte çalışıyordu.Aşağıdaki gibi:
Burda uygulamamız direk olarak database ile bağlantılı ve gerekli işlemleri yapmak için sql bilmek zorundayız.
İşte bu sistemin bazı dezavantajları var veritabanı yönetim sistemi değiştiğinde bazı değişiklikler yapmak,tablolardaki bazı değişiklikleri yapmak için uzun sql kodarı ve diğer işlemler için zaman problemi gibi.
İşte bunları daha hızlı ve kolay yapabilmek için orm teknolojisi geliştirilmiş bu yapıda aşağıdaki resimde:

Orm (Object Relational Mapping) kısaca veritabanımızdaki tabloları sınıflara kolonları özelliklere ve kayıtlarıda nesnelere dönüştüren ve artık veritabanını bunlarla konrtol etmemizi sağlayan teknolojidir.Bizim yazdığımız kodlar uygulama tarafından sql kodlarına dönüştürülüyor.

Bu teknolojininde bazı dezavantajları var bunlar ;
Performans olarak daha yavaş.
Kontrol tamamen bizde değil.