Hybrid vs Native
Merhaba,
En çok karşımıza çıkan sorulardan biri, uygulama geliştirirken hybrid mi yoksa native mi geliştirmem lazım. Yada bunların birbirine göre avantaj ve dezavantajları neler.
Öncelikle hybrid ve native uygulama nedir onu anlatarak başlayalım.
Hybrid Uygulama Nedir?
Hybrid uygulamalar genelde web tabanlı yazılan ve javascript altyapısı ile çalışan html ve css den oluşan yapılardır. Aynı web sitesini geliştirir gibi geliştirken bir backend programlama dili kullanılmaz php yada dotnet gibi. Sadece normal mobil uygulamalarda olduğu gibi uygulama backend ile servisler aracılığı ile konuşur bu kısmı da javascript xhr (XMLHttpRequest ) ile sağlar. Bu durumda hybrid uygulama native gibi görünen ve çalışan uygulamalar oluşturabilir. Burada önyüz geliştirme html ve css çok önem teşkil eder. Şöyle ki arayüzde kullandığınız bootstrap ve responsive bir yapı olması gerekir ve kullanılan button , list yapıları native de kullanılanlara çok benzer hale getirilebilir.
Hybrid uygulamalar derlenirken genelde cordova altyapısı kullanılır. Bu konuda cordova web sitesinden daha detaylı bilgi alabilirsiniz. Özetle mantık şu şekilde:
1 – cordova app yaratırsınız
ör:
cordova create hello com.example.hello HelloWorld
2 – platform eklersiniz
ör:
cordova platform add ios
cordova platform add android
3 – html, css ve js den oluşan kodlarınızı app yarattığınızda oluşan www klasörü içine eklersiniz.
4 – istediğiniz platforma build alırsınız.
ör:
cordova build ios
cordova build android
Özetle bu şekilde tabi daha çok özelleştirme ve detay var burada daha fazla detaya girmeyeceğim. Konu cordova olmadığı için ancak sonuçta tek dilde yazılan ve programlama kodu olarak javascript kullanılılarak yazılan kodlar size istediğiniz platformda uygulama üretmenizi sağlar. Temel avantajlarından bir tanesi budur.
Native kod gerektiren yerlerde birçok kez test edilmiş ve özel olarak hazırlanmış cordova plugin leri işimizi çözer.
Ne zaman tercih etmemeniz gerektiği tecrübe oldukça daha çok ortaya çıkar. Ancak temel olarak şu söylenebilir. Eğer native koda çok girmeniz gerektiği durumlar varsa, performans olarak çok önem arzeden işler yapıyorsanız hybrid bir yapı tercih etmeyebilirsiniz. Çünkü hybrid yapı temelde web browser üstünde çalışır ve basit işlerde çok sıkıntı çıkarmasada karmaşık işlerde ve performans gerektiren işlerde işinizi zorlaştırma ve uygulamayı daha kötü noktaya götürme ve işten çıkılmaz hale gelmesine sebep olabilmektedir.
Benim görüşüm , basit akışı olan, listeleme , form uygulamaları gibi uygulamalarda hybrid yöntemi seçmek zaman ve maliyet tasarrufu sağlayabilir.
Diğer tüm durumlarda native kod yazmak daha efektif ve performanslı olacaktır.
Native Uygulama Nedir?
Native uygulama android için konuşursak java dilinde yazdığınız, ios için ise objective-c yada swift dili ile yazdığınız uygulamalardır. Şu anda android de Android Studio ile native uygulama geliştirebilir, ios içinde Xcode ile Swift yada Objective-C seçerek native uygulama geliştirebilirsiniz.
Her türlü uygulama geliştirme ve tüm kütüphanelere direk erişme şansınız vardır.
Bu tip uygulamalarda karşımıza çıkan en büyük sorun hem android hem ios da uzmanlaşmış kadronun olması gerekliliğidir.
Buda bize maliyet olarak dezavantaj sağlar. Ancak performans ve esneklik açısından daha iyidir. Yani yapamayacağınız birşey yok diyebiliriz.
Özet ve Sonuç:
Hybrid uygulamalarda da plugin ler sayesinde birçok şeyi yapabilirsiniz. Ancak iş plugin i özelleştirme ye gelebilir. Bu plugin in yetersiz olduğu zamanlarda ortaya çıkar ki bu durumda yine android ve ios native programlama bilgisi gerektirecektir.
Bir app developer olarak düşündüğünüzde her iki yapıyı da biliyor olmak ve müşterinizi doğru yönlendirmek çok önemlidir. Eğer hızlı şekilde markete çıkmak isteniyor ve bütçe konusunda daha düşük bütçeler var ve native android ios developer sıkıntısı varsa bu durumda hybrid tercih edilebilir. Ancak süre, maliyet den ziyade performans ve esneklik önemli ve kadro var ise native tercih etmek herkesin içini daha çok rahatlatacaktır.
Bu arada hybrid in bir diğer avantajını da söylemeden bitirmemek lazım tabi, eğer web app isteniyorsa yani bu app in aynısı web de de çalışsın isteniyorsa zaten yapı web e uyumlu olduğu için browser platformu eklenerek yada hazırladığınız www klasörü altındaki kodlar zaten web server a yüklendiğinde çalışacaktır. Tabi cross domain ayarları yapmak , ssl li çalıştırmak, cordova.js yi içinden çıkarmak gerekebilir. Ancak bunlar aynı kodun web de çalışmasını engellemez sonuçta elinizde hem ios, hem android hem de web de çalışan bir yapı olacaktır.
Bu konuda sorularınız ve yorumlarınız olursa lütfen çekinmeyin, bu konuyu tartışmaktan ve hangisi daha iyi hangisi yada bu app e ve benim şartlarıma uygun irdelemekten her iki yapıyı da iyi tanıdığım için hoşuma gidiyor. Bu yazılımcı arkadaşlar arasında sürekli olacak ve tercihlerin belli zamanlarda ve teknolojinin gelişmesi ile ağırlığın her an değişebileceği ve diğer taraf kayabileceği bir konu.
Umarım biraz olsun özet bir bilgi verebilmiş ve faydalı olabilmişimdir.
Picasso
Android de resim işlemleri memory ve yönetim açısından dikkatle ele alınması gereken konulardan. Uzun zamandır takip ettiğim picasso çok kullanışlı ve çok kısa bir kod ile bir view içerisine resim yüklemenize yardım ediyor.
ör:
Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);
Minumum memory kullanımını hedefleyen bu kütüphane hakkında bilgiyi bu sayfadan edinebilirsiniz.
http://square.github.io/picasso/
Ancak benim anlatmak istediğim geçenlerde picasso ile bir resmi sdcard a download edebilirmiyim istediğim bir yere sorusuna da cevap veriyor olması beni çok sevindirdi.
Bunu yapmanın birçok yolu var aslında ve network işlemi yaptığınızdan bu işlemi bir thread içinde yada asynctask kullanarak yapmanız gerekiyor.
try
{
URL url = new URL("Enter the URL to be downloaded");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setDoOutput(true);
urlConnection.connect();
File SDCardRoot = Environment.getExternalStorageDirectory().getAbsoluteFile();
String filename="downloadedFile.png";
Log.i("Local filename:",""+filename);
File file = new File(SDCardRoot,filename);
if(file.createNewFile())
{
file.createNewFile();
}
FileOutputStream fileOutput = new FileOutputStream(file);
InputStream inputStream = urlConnection.getInputStream();
int totalSize = urlConnection.getContentLength();
int downloadedSize = 0;
byte[] buffer = new byte[1024];
int bufferLength = 0;
while ( (bufferLength = inputStream.read(buffer)) > 0 )
{
fileOutput.write(buffer, 0, bufferLength);
downloadedSize += bufferLength;
Log.i("Progress:","downloadedSize:"+downloadedSize+"totalSize:"+ totalSize) ;
}
fileOutput.close();
if(downloadedSize==totalSize) filepath=file.getPath();
}
catch (MalformedURLException e)
{
e.printStackTrace();
}
catch (IOException e)
{
filepath=null;
e.printStackTrace();
}
Log.i("filepath:"," "+filepath) ;
return filepath;
Ancak daha kolay bir şekilde picasso ile yapmak için target oluşturmanız yeterli
public Target targetLoginBg = new Target() {
@Override
public void onBitmapLoaded(final Bitmap bitmap, Picasso.LoadedFrom from) {
new Thread(new Runnable() {
@Override
public void run() {
File file = new File(
Environment.getExternalStorageDirectory().getPath()
+ "/your_folder/login_bg.jpg");
try {
file.createNewFile();
FileOutputStream ostream = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.JPEG,100,ostream);
ostream.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {}
};
daha sonra download u başlatmak için bu kodu çağıryorsunuz ,
login_bg_url_val içinde download etmek istediğiniz resmin url si var.
Picasso.with(SplashActivty.this).load(login_bg_url_val).into(targetLoginBg);
Swift vs. Objective-C – Swift e geçmek için 10 neden
Apple ın uzun zamandır geliştirdiği swift dili – objective-c nin yerini alıyor. Performans açısından ve daha kolay uygulama geliştirilebilmesi açısından Swift gelecek nesilin programlama dili olurken , objective-c geçmişte kalıyor.
Gelin swift in artılarına beraber bakalım
1 – Swift okuması ve anlaması daha kolay bir dil
2 – Swift yönetmesi daha kolay bir dil. Objective c deki m ve h dosyalarına artık gerek yok tek bir swift dosyasında herşeyi tutabiliyorsunuz.
3 – Swift hatalar açısından daha güvenli ve daha az hata yapma imkanı sunuyor. Eğer hata oluşacak bir kod yazıyorsanız swift bunu önceden öngörerek compiler hatası oluşturuyor ve derlemiyor.
4 – Swift memory yönetimi konusunda daha iyi. Birçok memory yönetim işini swift kendi hallediyor ve sizin yazarken objective-c deki gibi bunu düşünmenize gerek kalmıyor.
5 – Swift ile daha az kod yazıyorsunuz. Örneğin iki string i birleştirme konusunda objective-c de eksik olan ve modern dillerde bulunan + operatörü ile kolayca birleştirme yapabiliyorsunuz swift de.
6 – Swift daha hızlı. Swift yapılan performans testlerinde C++ hızına yakalştığı gözlemlenmiş ve objective-c ye göre daha hızlı olduğu ortaya çıkmış durumda.
7 – Swift de isimlendirme çakışmaları daha az. Diğer projelerde , open source projelerde kullanılan bazı dosyaları kullanmak istediğinizde namaspace bazında işlem yaptığı için daha az dosya – isim çakışması oluyor.
8 – Swift dinamik kütüphaneleri destekliyor. Bu özellik ios 8 ve swift ile gelmiş ve kütüphaneleri ihtiyaç olduğunda (on-the-fly) yüklüyor ve bu sayede daha hızlı etkileşim sağlanıyor ve memory ye yüklenen uygulama daha az yer kaplıyor.
9 – Swift playground daha çok deneme yapmanızı ve öğrenmenizi sağlıyor. Tüm uygulamayı yazmadan bazı şeyleri deneyerek test ederek kullanabiliyorsunuz.
10 – Swift gelecek yazılım dili olarak ilerliyor. Objective C bir yere gitmiyor ve Swift 2 ile Swfit 1.2 de eksik ve hatalı olan birçok şey düzeltildi.
Bu kadar artı da bir dili kullanmak ve objective-c de yaşadığımız zorlukları geride bırakmak için yeterli diye düşünüyorum.
Marshmallow’un en iyi özellikleri
Android işletim sisteminin en yeni sürümü olan Marshmallow’un en iyi özellikleri şöyle:
Bildiğiniz gibi mobil cihaz sektöründe çok büyük bir rekabet var. Bu rekabetin içindeki markalar, diğer bütün mobil cihazlardan ziyade akıllı telefonların büyüyen piyasasında lider olmak istiyorlar. Şu an dünya üzerinde en çok kullanılan telefon markası, yani akıllı telefon piyasasının lideri Samsung. Samsung’u çokta geride olmayan Apple izliyor.
Samsung, Sony, LG gibi teknoloji devleri, telefonlarında Android işletim sistemi kullanıyor. Apple ise sadece iPhone’a özel olarak üretilmiş iOS işletim sistemini kullanıyor. Bu nedenle markalar arasında olduğu kadar işletim sistemleri arasında da büyük bir rekabet var. Geçtiğimiz günlerde iOS’un yeni sürümü olan iOS 9, yayınlanmasıyla birlikte kullanıcılarına hata yaşatmıştı. Android’in bugün Nexus cihazlarına gelmesiyle resmi çıkışını yapan Marshmallow, nam-ı diğer Android 6.0, Apple’ın bu hatasını bir kazanca çevirmek peşinde. Son günlerde kendinden oldukça çok söz ettiren Marshmallow’un en iyi özelliklerini sizler için derledik. Bakalım bu yeni sürüm bizlere ne gibi hoş yenilikler getirecek.
Google Now’ın yeni özelliği, başka bir uygulama sırasında kullanılabiliyor olması. Örneğin bir arkadaşınızla mesajlaşıyorsunuz ve size bir film isminden bahsetti. Telefonunuzun “home” tuşuna basılı tutuyorsunuz ve Google Now ekranı otomatik olarak tarıyor. Ekranda bulunun kelimelerin aramasını Google’da gerçekleştiriyor ve filmi bulduğu an IMDB gibi bir siteden açmak için sizden izin istiyor. Bunun gibi hızlıca arama seçeneklerine sahip olan Google Now size o sırada aramak istediğiniz ne varsa leb demeden leblebiyi anlayarak “Buyur abi, merak ettiklerini topladım bak bakalım neymiş” dercesine bize sunacak. Aferin Google Now.
Parmak İzi Okuyucu Sensörü ile Çalışan Uygulamalar
Parmak izi okuyucusu bulunan telefonlar veya uygulamalar yeni çıkmış değil, fakat Android Marshmallow, güvenliği ve gizliliği sağlamak adına bu özelliği şimdiye kadar kullanılandan çok daha fazla kullanmayı hedefliyor. Yani daha iyi bir güvenlik ile gelen Android 6.0’da parmak izi desteği de artacak ve eğer cihazınızda parmak izi okuyucusu varsa daha güvenli bir telefona sahip olmuş olacaksınız.
USB Type-C
Android Marshmallow işletim sistemine sahip olan telefonlar USB-C girişine sahip olacaklar. Bu USB türünün daha dayanıklı ve daha kolay kullanılabilir olduğu belirtiliyor. Sonunda şarj aletleri ters takılmak için zorlanmayacak. Ama yeri gelmişken hemen “Apple yaptı” diye atlayacak olanlara belirtelim. USB-C’nin Apple ile alakası yok, sadece bangır bangır bağırarak ilk kullanan firma oldu. Ama tam zamanında kullandı ki artık neredeyse her cihazda görebiliriz. Tabii yeni çıkacaklarda.
Doze
Bu uygulama Google tarafından Android Marshmallow’a özel olarak geliştirildi ve her cihazda bulunacak. Cihazların pil ömrünü uzatmaya ve kullanılmayan uygulamaların kapatılmasına yarayan Doze, sizin için sizin şarj seviyenizi düşünecek. Nasıl mı?
Şimdi diyelim ki gece bir telefonu şarja takmadan uyuyup kalmışsınız. Sonuç? Sabah büyük ihtimalle kapalı bir telefon oluyor. İşte Android 6.0 ile gelen Doze özelliği ile telefon pasif konumda ise yani uzun süre elinizi sürmemiş iseniz telefon kendi kendine pil tasarrufu moduna geçiyor ve şarjınızın bitmesini engelliyor. Yani %60 şarjda uyumuşsanız sabah kalktığınızda %50lerden fazla bir şarj durumu ile uyanacak ve üzülmeyeceksiniz.
Daha İyi “Kopyala, Kes, Yapıştır” Özellikleri
Android kullanıcıları olarak ekranın kenarında kalan bir kelimeyi kopyalamanın ne kadar zor olduğunu hepimiz biliriz. Android Marshmallow, bu işlevi çok daha kolay halde getirecek birkaç güncellemeyle geliyor. Yani siz bir kelimeyi seçtiğinizde taa yukarıdan kopyalayı aramak yerine seçtiğiniz kelimenin hemen üzerinde çıkacak olan Kes, Kopaya, Yapıştır seçenekleri ile kolayca yazım hataları düzeltmeleri yapabileceksiniz. Ayrıca sanki seçim kısmı da daha kolay gibi, daha önceleri kelime seçmek de biraz zor gibi geliyordu bize.
Chrome Diğer Uygulamalar Açıkken Çalışabiliyor
Google yeni işletim sisteminde, “Chrome Custom Tabs” adlı bir özellikle yüklenmesini beklediğiniz verileri içeren internet sayfalarının kapanmasını engelleyecek ve siz başka uygulamada olsanız da Chrome uygulması izniniz olmadan kapanmayacak. Böylelikle gereksiz veri kullanımı ve hali hazırda kısıtlı olan kotanıza da zeval gelmeyecek. Mis gibi.
Nihayet Uygulama İzin Kontrolü!
İşte Android 6.0’ın belki de en cici özelliği bu. Çünkü Android camiasında örneğin bir oyunun kamera izni istemesi biraz garip kaçabilir. Hele ki kamera ile işi yoksa bi istemsiz “Nabacak la bu benim kamerayı” diye bi sorabilirsiniz. Android 6.0’da bu sorunlar olmaması için uygulamayı ilk yüklediğinizden sonra yapacağınız işlemler için erişim izni isteyecek. Örneğin Twitter’da fotoğraf paylaşmak isterseniz o sırasa size çıkacak bir pop up ile sizin fotoğraflarınıza erişmek için izin isteyecek. Daha sonra ise Uygulama Ayarları kısımından uygulamalarınızın hangi izileri alıp alamayacağına siz karar verebileceksiniz.
Material Design Nedir?
İlk olarak Google I/O 2014’te tanıtılan yenilikçi bir tasarım yaklaşımı ile tüm ürünlerinde tek bir tasarım dilini oturtmak isteyen Google tüm uygulamalarını nu yeni material design tarzına geçirmiş durumda. Material Design, Android’in alıştığımız görüntüsünden büyük bir ayrılışı gösteriyor. Origamiden ilham alan düzen, Microsoft’un Metro temasının daha pastel ve kağıtlaşmış halini andırıyor. Yeni tasarımın çözmek istediği sorunlardan biri, uygulamalar arasında tutarlı bir düzen sunmak amacında. Material Design, Google’ın sözleriyle “bir durumdan diğerine sorunsuz olarak geçmek üzere bir iskelet sunuyor”. Böylece hem arayüz içerisinde daha hızlı dolaşabiliyor, hem de bir öğeye dokunduğunuzda ne olacağını kestirebiliyorsunuz. Material Design, Google’ın tüm mobil uygulamalar, web siteleri ve ürünlerde kullanılması gerekliliğini, bilinen tasarım değerleri ile bilimsel çalışmaları bir araya getiren bir tasarım anlayışı.
Material Design temel olarak iki temel unsur üzerine inşa edilmiştir dersek sanırım çok fazla yanılmamış oluruz. Bunlar Material ve Motion olarak adlandırılabilir.
Material
Material tasarım içerisinde içeriği bizlere sunmaktadır. Tasarımı yapılmış olan arayüz ve yüzey bize içerikle ile ilgili ipucu sağlamaktadır. Gerçek hayatta bir oda içerisinde girdiğimizde, duvarları gördüğümüz için odanın boyutu ile ilgili bilgi sahibi oluruz. Aynı zamanda odanın iç özellikleri ise bize odanın kendisi ile ilgili bilgiler sunar. Örneğin, evimizin mutfağı, banyosundan farklı gözükmektedir. Benzer bir durum Material Design anlayışı içinde geçerlidir. Tasarım ve içeriğin bir araya gelmesiyle birlikte kullanıcıya dijital bir dünya içerisinde anlamlı bir sonuç sunmaktadır. Burada kullanıcı ona arayüz hakkında daha içerik sunulduğu için , arayüz hakkında daha fazla bir bilgiye sahip olacaktır.
Tasarımda kullanılan bir card, bizlere anlamlı bir içerik sunmaktadır. Aynı zamanda bu kullanım Material Design içerisinde genel bir kullanım olarak değerlendirilebilir. Bir card kendi içerisinde doğrudan context sahibi olmasının yanında diğer card’ lar ile de ilişki içerisindedir.
Motion
Material Design anlayışı çerçevesinde düşünüldüğünde Motion kavramı da benzer bir senaryoya sahiptir. Motion, uygulama akışı boyunca kullanıya bir içerik üretmektedir. Özellike bu durum ürün sürekliliği söz konusu olursa ciddi mana da önem arz etmektedir. Şimdi bu senaryo nasıl çalışmaktadır onu anlamaya çalışalım.
Şimdi önünüzde bir dizi karttan oluşan bir içerik olduğunu düşünün. Mesela, home feed olarak isimlendirilebilecek bir yapı olabilir. Siz bu kartlardan herhangi birisinde tıkladığınız durumda, Material Card sadece tek bir kart olarak devamında yer oluşan içeriği kullanıcıya sunmak yerine tam ekran olarak sunmaktadır. Bu durumun kullanıcıya sunduğu en önemli durum ise, kullanıcı davranışına karşı verilen yanıtın tutarlı olmasıdır.
Daha fazlası…
Material kavramını biraz daha inceleyelim. Aslında material design statik tasarım elementlerinizin bir birleşiminden oluşuyor. Şekiller, renk, yazı fontları ve diğer tasarım olarak kullandığınız diğer araçlar.
Renk
Renk seçimi hem tasarımcılar hemde kullanıcılar açısından çok önemli. Piskolojik olarak kullanıcıları etkilediği biliniyor. Renk, tasarımı daha güven verici, ilgi çekici hale getirebikiyor. Material Design içinde birçok renk paletine sahibiz.
Devam edeceğiz…
Kaynaklar
http://code.tutsplus.com/articles/what-you-can-learn-from-googles-material-design–cms-22516
https://www.google.com/design/spec/material-design/introduction.html
http://developer.android.com/design/material/index.html
Android Volley Kullanımı
Volley, Android uygulamalarında network işlemlerinin yapımında kullanılmak üzere geliştirilen, bu işlemlerin yapılmasını kolaylaştıran ve daha da önemlisi hızlandıran bir kütüphanedir. Temel olarak bir network kütüphanesi olan Volley, kendisine gösterilen URL adresine bağlanıyor ve oradan sağlanan verileri size sunuyor. Default olarak Volley, bu işlemleri asenkron olarak gerçekleştirmektedir. Bundan dolayı bu tür işlemler için Asynctask yapılarını kullanma gibi dertlerimiz olmayacak.
Volley kütüphanesinin bizlere sunduğu avantajlar genel olarak aşağıda sıralanmıştır.
Network işlemlerinde otomatik zamanlama
Çoklu eşzamanlı olarak gerçekleşebilen network işlemleri
HTTP üzerinden resim indirmenize imkan tanır. İndirdiğiniz resimleri bellekte ya da disk üzerinde cache’ yebilirsiniz. Resimleriniz inerken, ImageView içerisinde otomatik olarak bir “loading” simgesi gösterebilirsiniz ve aynı zamanda hata durumları için görsel ayarlayabilirsiniz.
İstekleri kuyruk yapısında tutar ve eğer isteğin cevabına artık ihtiyaç kalmadıysa otomatik olarak isteği iptal eder.
Istekler arasında önceliklendirme yapmanıza olanak tanır.
En önemli özelliklerinden birisi de request’leri kolaylıkla iptal edebilirsiniz.
Volley kütüphanesini edinmek
Öncelikle Volley.jar’ı nasıl elde edebileceğinize bakalım. Ne yazık ki Volleykütüphanesini kendinizin indirip JAR’laması gerekmektedir. Ben bu yazıda bu işlemlerin nasıl gerçekleştirildiğinden bahsetmek istemiyorum. Gerekli bilgileri Google hazırlamış olduğu sayfadan edinebilirsiniz
İnternet iznini almayı unutmayın!
Volley kütüphanesini kullanabilmeniz amacıyla, uygulamanızın manifest dosyasına android.permission.INTERNET iznini eklemeniz gerekmektedir. Bu izin olmadan geliştirdiğiniz uygulama ağ bağlantısı kuramayacaktır.
Volley Singleton sınıfı oluşturalım.
Eğer uygulamanız sürekli olarak network işlemleri geliştirecekse, uygulamanın hayat döngüsü boyunca kullanılacak olan RequestQueue nesnesinin tek bir örneğini kullanmak en etkili yol gibi görünmekte. Bu işlemi bir kaç alternatif yöntem ile gerçekleştirebilirsiniz. Önerilen yaklaşım ise, RequestQueue ve diğerVolley fonksiyonel özelliklerini barındıran singleton sınıf yapısının kullanılmasıdır.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
private static MySingleton mInstance;
private RequestQueue mRequestQueue;
private ImageLoader mImageLoader;
private static Context mCtx;
private MySingleton(Context context) {
mCtx = context;
mRequestQueue = getRequestQueue();
mImageLoader = new ImageLoader(mRequestQueue,
new ImageLoader.ImageCache() {
private final LruCache<String, Bitmap>
cache = new LruCache<String, Bitmap>(20);
@Override
public Bitmap getBitmap(String url) {
return cache.get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
cache.put(url, bitmap);
}
});
}
public static synchronized MySingleton getInstance(Context context) {
if (mInstance == null) {
mInstance = new MySingleton(context);
}
return mInstance;
}
public RequestQueue getRequestQueue() {
if (mRequestQueue == null) {
// getApplicationContext() is key, it keeps you from leaking the
// Activity or BroadcastReceiver if someone passes one in.
mRequestQueue = Volley.newRequestQueue(mCtx.getApplicationContext());
}
return mRequestQueue;
}
public <T> void addToRequestQueue(Request<T> req) {
getRequestQueue().add(req);
}
public ImageLoader getImageLoader() {
return mImageLoader;
}
}
|
Bu yapının kullanımı ise şu şekilde örneklenebilir.
|
1
2
3
4
5
6
7
|
// Get a RequestQueue
RequestQueue queue = MySingleton.getInstance(this.getApplicationContext()).
getRequestQueue();
...
// Add a request (in this example, called stringRequest) to your RequestQueue.
MySingleton.getInstance(this).addToRequestQueue(stringRequest);
|
Bu yazının içerisinde kullanılan örnek kodlar Google ‘ ın hazırlamış olduğu örnek sayfadan sadece bir tanıtım ve fikir vermesi amacıyla alınmıştır. Geliştirmek istediğiniz uygulamalara göre bu sınıfın içerisini düzenleyebilirsiniz.



