Merhabalar
Android’de sayfalar arası veri alışverişi yaparken Intent/Bundle yapısını çoğunlukla kullanırız. Bu yöntem daha çok string, integer, double, boolean vs. verileri diğer sayfalara göndermek için kullanılır. Bunun dışında herhangi bir object göndermek istersek karşımıza 2 yöntem çıkıyor. Bu yöntemlerden ilki Serializable
diğeri ise Parcelable
Bu yazımda bu ikisinin karşılaştırmasının yanında nasıl kullanabileceklerinden de bahsetmeye çalışacağım.
İlk olarak herhangi bir türe sahip değişkeni nasıl diğer sayfalara göndeririz kısaca hatırlayalım. Bunun için Intent
yapısını kullanıyoruz. İsterseniz Bundle
kullanarakta gönderebiliriz. Örneğin bir activity’den diğerine String türüne sahip bir değişkeni diğer activity’e gönderelim.
Gönderme işlemi yaparken birinci activity’nin onCreate()
metoduna alttaki kodu yazıp
1 2 3 4 5 6 |
String data = "myData"; Intent intent = new Intent(this, SecondActivity.class); intent.putExtra("PASS_DATA", data); startActivity(intent); |
İkinci activity onCreate()
metodunda alttaki gibi veriyi alma işlemini gerçekleştirebiliriz.
1 2 |
Intent intent = getIntent(); String data = intent.getStringExtra("PASS_DATA"); |
Şimdi de iki activity arasında bir object transferi gerçekleştirmek istediğimizde neler yapabiliriz buna bir bakalım. Bunun için 2 yöntem var demiştik. Bunlar Serializable
ve Parcelable
. Eğer java ile daha önceden projeler geliştirmiş iseniz Serializable size yabancı gelmeyecektir. Kullanım olarak daha kolaydır ancak performans açısından aynı şeyleri söylemek çok mümkün olmuyor. Şimdi Serializable interface nasıl kullanılır ona bir göz atalım.
1 2 3 4 5 6 7 8 9 10 |
public class MySerializable implements Serializable String name; int year; List<Skill> skillList; static class Skill implements Serializable { String name; int year_experience; } } |
Gördüğünüz üzere kullanımı oldukça basit gözüküyor. Yani kullanabilmek için gerekli interface implement etmek yeterli
Şimdide asıl konumuz Parcelable
gelelim. Android için Google mühendisleri tarafından sayfalar arası daha hızlı veri transferi yapabilmek için geliştirilen bu interface performansıyla Serializable
üstünlük sağlıyor. Google mühendislerine göre Parcelable hız konusunda oldukça iyi seviyede. Yani veri transferini hızlı bir şekilde gerçekleştiriyor. Parcelable interface kullanımıda bu şekilde
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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
class MyParcelable implements Parcelable { String name; int year; List<Skill> skillList; MyParcelable(Parcel in) { this.name = in.readString(); this.year = in.readInt(); this.skillList = new ArrayList<Skill>(); in.readTypedList(skillList, Skill.CREATOR); } void writeToParcel(Parcel dest, int flags) { dest.writeString(name); dest.writeInt(year); dest.writeTypedList(skillList); } int describeContents() { return 0; } static final Parcelable.Creator<MyParcelable> CREATOR = new Parcelable.Creator<MyParcelable>() { MyParcelable createFromParcel(Parcel in) { return new MyParcelable(in); } MyParcelable[] newArray(int size) { return new MyParcelable[size]; } }; static class Skill implements Parcelable { String name; int year_experience; Skill(Parcel in) { this.name = in.readString(); this.year_experience = in.readInt(); } @Override void writeToParcel(Parcel dest, int flags) { dest.writeString(name); dest.writeInt(year_experience); } static final Parcelable.Creator<Skill> CREATOR = new Parcelable.Creator<Skill>() { Skill createFromParcel(Parcel in) { return new Skill(in); } Skill[] newArray(int size) { return new Skill[size]; } }; @Override int describeContents() { return 0; } } } |
Evet şöyle bir baktığınızda kod kalabalığı gibi görünsede korkmanıza gerek yok. Parcelable
interface implement ettiğiniz zaman zaten Android Studio‘da hata veren kısma gelip Alt + Enter
tuşlarına bastığınızda otomatik olarak gerekli metodlar implement ediliyor.
O kadar kod yazdık birde performans testlerine bakalım ki ona göre hangisini tercih edeceğimize karar verelim.
Hız testlerinde göründüğü üzere Parcelable oldukça hızlı. Yani Parcelable kullanmanız sizin yararınıza olacaktır.
Kaynaklar :
https://developer.android.com/reference/android/os/Parcelable.html
http://docs.oracle.com/javase/6/docs/api/java/io/Serializable.html
https://dzone.com/articles/using-android-parcel
http://www.developerphil.com/parcelable-vs-serializable/
http://shri.blog.kraya.co.uk/2010/04/26/android-parcel-data-to-pass-between-activities-using-parcelable-classes/
http://www.3pillarglobal.com/insights/parcelable-vs-java-serialization-in-android-app-development
https://guides.codepath.com/android/using-parcelable