JavaveAndroidHakkında

Android Yazılım geliştirme konusunda sürekli bilgi akışı sağlayan, soru-cevaplar ile öğrenme gerçekleştirmeyi amaçlayan bir eğitim süreci planlıyoruz.

14 Mart 2015 Cumartesi

Android-ActivityLifeCycleYönetimi-BirActivityYenidenOluşturmak

23:50

Bir Activitynin Yeniden Oluşturulması



                Normal kullanım sırasında activity’nizin yok edilmesi durumu ile ilgili, kullanıcı Back butonuna basarak geri dönmesi veya activity kendi içinde finish() metoduyla destroy işareti alması gibi birkaç senaryo mevcuttur. Ayrıca sistem kullanıcının uygulamanızdan uzun bir süre boyunca ayrılması durumunda veya diğer bir uygulamanın daha fazla sistem kaynağına ihtiyaç duyması halinde arka planda kalan uygulamaların kapatılması gerektiğinde bu işlemi kendiliğinden yapabilir.
                Yukarıdaki sebeplerden hangisi ile olursa olsun, activity örneğinin yok edilmesi sistem tarafından Activity örneğine daha fazla ihtiyaç duyulmadığının anlaşılmasıyla gerçekleşir. Ancak, sistem kısıtlamaları nedeniyle bir activity örneği yok edildiğinde, gerçek activity örneği yok olsa bile kullanıcı bu uygulamaya geri döndüğünde, bu activity yok edildiğinde son duruma ait kayıtlı verilerin de yardımıyla sistem yeni bir örnek oluşturarak bu activityi hatırlayabilir. Kayıtlı veri dediğim bu veriler, “instance state” dediğimiz bir önceki activity durumunu yeniden oluşturmak için sistem tarafından kullanılır ve bu veriler Bundle nesnesinde saklanan anahtar-değer çiftleri seti ( collection of key-value pairs) olarak bilinir.

UYARI:
                Activity’niz kullanıcını cihazı yatay veya dikey olarak her yönlendirmesinde yok edilip yeniden oluşturulur. Ekran yönlendirmesi her değiştiğinde, sistem her yönlendirme için ihtiyaç duyulan farklı ara yüz kaynaklarını yüklemek için bu işlemi gerçekleştirir.
Varsayılan olarak, Activity layout tasarımında yer alan her bir View öğesi için sistem Bundle kullanarak son durumları saklamaktadır. (Örneğin, EditText nesnesine girilen text değerinin otomatik olarak saklanması). Bu sayede, ekran yönlendirmesi her değiştiğinde hali hazırda girilmiş olunan veya mevcut durum bilgilerini kaydetmek için ayrıca bir kod yazmanıza gerek kalmaması sağlanmış olur. Ancak, activity’niz kaydetmek isteyebileceğiniz kullanıcının yapmış olduğu son işlemleri takip edebilmenize yarayacak bilgiler gibi çok daha fazla durum bilgisi içeriyor olabilir. Bunlar için SharedPreferences konularında anlattığımız yetenekleri kullanmanız gerekecektir.

NOT:
Android sistem tarafından view öğelerinize ait durumların yeniden yüklenmesi durumunda her bir view android:id niteliği ile tanımlanmış benzersiz bir id’ye sahip olması gerekir.

Activity durumu ile ilgili olarak ek veriler kaydetmek için, onSaveInstanceState() metodunu Override etmelisiniz. Sistem bu metodu çağırarak, kullanıcının uygulamanızı (activitynizi) terk ettiği anda bu verileri Bundle nesnelerine geçirir ve beklenmedik sonlanmalar meydana gelmesi ihtimaline karşın son durumların kaydedilmesini sağlar. Eğer sistem activity örneğini daha sonra yeniden oluşturursa, bu veriler aynı Bundle nesnelerinden olan onRestoreInstanceState() ve onCreate() metotlarının her ikisine de geçirilir.




                Sistem activitynizi durduracağı zaman onSaveInstanceState() metodunu çağırır (1). Burada activitynizin daha sonra yeniden başlatılırken ihtiyaç duyacağı durum bilgilerini kaydedersiniz. Sistem (1) de tanımlanan durum bilgilerini hem onCreate() metoduna hem de onRestoreInstanceState() metoduna geçirir.(3)

Activitynizin Durumunu Kaydetme


                Activityniz durdurulacağı zaman, sistem onSaveInstanceState() metodunu çağırır ve activityniz son durum bilgisini anahtar-değer çiftleri setine kaydeder. Bu metodun varsayılan uygulamasında View hiyerarşisine göre activitynin durumu hakkındaki bilgiler kaydedilir. (Örneğin, EditText içindeki bir text değeri veya ListView içindeki scroll konumu gibi)
                Activitynize ait fazladan durum bilgisi kaydetmek için, onSaveInstanceState() metodunu uygulamalı ve anahtar-değer çiftlerini Bundle nesnelerine eklemelisiniz.

ÖRNEK:

static final String STATE_SCORE = "playerScore";
static final String STATE_LEVEL = "playerLevel";
...

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
   
// Save the user's current game state
    savedInstanceState
.putInt(STATE_SCORE, mCurrentScore);
    savedInstanceState
.putInt(STATE_LEVEL, mCurrentLevel);
   
   
// Always call the superclass so it can save the view hierarchy state
   
super.onSaveInstanceState(savedInstanceState);
}

UYARI:
Her zaman onSaveInstanceState() metodunu superclass olarak uygulamalısınız böylece varsayılan uygulama ile view hiyerarşi durumunu kaydedebilirsiniz.

 

Activity Durumunu Yeniden Yüklemek


                Daha önce yok edilen activityniz yeniden oluşturulurken, sistem tarafından activitynizden Bundle nesnelerine geçirilen bilgiler dahilinde kayıtlı son durumu yeniden çağırabilirsiniz. onCreate() ve onRestoreInstanceState() metotlarının her ikisi de aynı Bundle kaynağından bu durum bilgilerini çeker.
                Bunun nedeni, activityniz ilk defa oluşturulurken veya daha önce yok edilen bir örnek yeniden oluşturulurken onCreate() metodu sistem tarafından çağırılmasıdır. Bundle nesnelerini okumaya çalışmadan evvel mutlaka bu nesnelerin boş mu? Dolu mu? olduklarını kontrol etmeniz gerekir. Eğer boş ise, sistem yok edilmiş bir örnek oluşturmak yerine activitynin yeni bir örneğini oluşturur.
onCreate() metoduyla bazı durum verilerini nasıl yeniden yüklendiğini inceleyelim.
ÖRNEK:

@Override

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState); // Always call the superclass first

   

    // Check whether we're recreating a previously destroyed instance

    if (savedInstanceState != null) {

        // Restore value of members from saved state

        mCurrentScore = savedInstanceState.getInt(STATE_SCORE);

        mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);

    } else {

        // Probably initialize members with default values for a new instance

    }

    ...

}

onCreate() metodu yerine sistem tarafından onStart () metodunun hemen ardından çağırılacak olan onRestoreInstanceState() metoduyla yeniden yükleme işlemi yapmak isterseniz, Bundle nesnelerini kontrol etmenize gerek kalmaz.

ÖRNEK:

public void onRestoreInstanceState(Bundle savedInstanceState) {

    // Always call the superclass so it can restore the view hierarchy

    super.onRestoreInstanceState(savedInstanceState);

   

    // Restore state members from saved instance

    mCurrentScore = savedInstanceState.getInt(STATE_SCORE);

    mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);

}

UYARI:
Her zaman onRestoreInstanceState() metodunu superclass olarak uygulamalısınız böylece varsayılan uygulama ile view hiyerarşi durumunu kolaylıkla yeniden oluşturabilirsiniz.


Soru ve Görüşleriniz için: AndroidVeJava

14 Mart 2015 Cumartesi

Android-ActivityLifeCycleYönetimi-BirActivityYenidenOluşturmak

Bir Activitynin Yeniden Oluşturulması



                Normal kullanım sırasında activity’nizin yok edilmesi durumu ile ilgili, kullanıcı Back butonuna basarak geri dönmesi veya activity kendi içinde finish() metoduyla destroy işareti alması gibi birkaç senaryo mevcuttur. Ayrıca sistem kullanıcının uygulamanızdan uzun bir süre boyunca ayrılması durumunda veya diğer bir uygulamanın daha fazla sistem kaynağına ihtiyaç duyması halinde arka planda kalan uygulamaların kapatılması gerektiğinde bu işlemi kendiliğinden yapabilir.
                Yukarıdaki sebeplerden hangisi ile olursa olsun, activity örneğinin yok edilmesi sistem tarafından Activity örneğine daha fazla ihtiyaç duyulmadığının anlaşılmasıyla gerçekleşir. Ancak, sistem kısıtlamaları nedeniyle bir activity örneği yok edildiğinde, gerçek activity örneği yok olsa bile kullanıcı bu uygulamaya geri döndüğünde, bu activity yok edildiğinde son duruma ait kayıtlı verilerin de yardımıyla sistem yeni bir örnek oluşturarak bu activityi hatırlayabilir. Kayıtlı veri dediğim bu veriler, “instance state” dediğimiz bir önceki activity durumunu yeniden oluşturmak için sistem tarafından kullanılır ve bu veriler Bundle nesnesinde saklanan anahtar-değer çiftleri seti ( collection of key-value pairs) olarak bilinir.

UYARI:
                Activity’niz kullanıcını cihazı yatay veya dikey olarak her yönlendirmesinde yok edilip yeniden oluşturulur. Ekran yönlendirmesi her değiştiğinde, sistem her yönlendirme için ihtiyaç duyulan farklı ara yüz kaynaklarını yüklemek için bu işlemi gerçekleştirir.
Varsayılan olarak, Activity layout tasarımında yer alan her bir View öğesi için sistem Bundle kullanarak son durumları saklamaktadır. (Örneğin, EditText nesnesine girilen text değerinin otomatik olarak saklanması). Bu sayede, ekran yönlendirmesi her değiştiğinde hali hazırda girilmiş olunan veya mevcut durum bilgilerini kaydetmek için ayrıca bir kod yazmanıza gerek kalmaması sağlanmış olur. Ancak, activity’niz kaydetmek isteyebileceğiniz kullanıcının yapmış olduğu son işlemleri takip edebilmenize yarayacak bilgiler gibi çok daha fazla durum bilgisi içeriyor olabilir. Bunlar için SharedPreferences konularında anlattığımız yetenekleri kullanmanız gerekecektir.

NOT:
Android sistem tarafından view öğelerinize ait durumların yeniden yüklenmesi durumunda her bir view android:id niteliği ile tanımlanmış benzersiz bir id’ye sahip olması gerekir.

Activity durumu ile ilgili olarak ek veriler kaydetmek için, onSaveInstanceState() metodunu Override etmelisiniz. Sistem bu metodu çağırarak, kullanıcının uygulamanızı (activitynizi) terk ettiği anda bu verileri Bundle nesnelerine geçirir ve beklenmedik sonlanmalar meydana gelmesi ihtimaline karşın son durumların kaydedilmesini sağlar. Eğer sistem activity örneğini daha sonra yeniden oluşturursa, bu veriler aynı Bundle nesnelerinden olan onRestoreInstanceState() ve onCreate() metotlarının her ikisine de geçirilir.




                Sistem activitynizi durduracağı zaman onSaveInstanceState() metodunu çağırır (1). Burada activitynizin daha sonra yeniden başlatılırken ihtiyaç duyacağı durum bilgilerini kaydedersiniz. Sistem (1) de tanımlanan durum bilgilerini hem onCreate() metoduna hem de onRestoreInstanceState() metoduna geçirir.(3)

Activitynizin Durumunu Kaydetme


                Activityniz durdurulacağı zaman, sistem onSaveInstanceState() metodunu çağırır ve activityniz son durum bilgisini anahtar-değer çiftleri setine kaydeder. Bu metodun varsayılan uygulamasında View hiyerarşisine göre activitynin durumu hakkındaki bilgiler kaydedilir. (Örneğin, EditText içindeki bir text değeri veya ListView içindeki scroll konumu gibi)
                Activitynize ait fazladan durum bilgisi kaydetmek için, onSaveInstanceState() metodunu uygulamalı ve anahtar-değer çiftlerini Bundle nesnelerine eklemelisiniz.

ÖRNEK:

static final String STATE_SCORE = "playerScore";
static final String STATE_LEVEL = "playerLevel";
...

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
   
// Save the user's current game state
    savedInstanceState
.putInt(STATE_SCORE, mCurrentScore);
    savedInstanceState
.putInt(STATE_LEVEL, mCurrentLevel);
   
   
// Always call the superclass so it can save the view hierarchy state
   
super.onSaveInstanceState(savedInstanceState);
}

UYARI:
Her zaman onSaveInstanceState() metodunu superclass olarak uygulamalısınız böylece varsayılan uygulama ile view hiyerarşi durumunu kaydedebilirsiniz.

 

Activity Durumunu Yeniden Yüklemek


                Daha önce yok edilen activityniz yeniden oluşturulurken, sistem tarafından activitynizden Bundle nesnelerine geçirilen bilgiler dahilinde kayıtlı son durumu yeniden çağırabilirsiniz. onCreate() ve onRestoreInstanceState() metotlarının her ikisi de aynı Bundle kaynağından bu durum bilgilerini çeker.
                Bunun nedeni, activityniz ilk defa oluşturulurken veya daha önce yok edilen bir örnek yeniden oluşturulurken onCreate() metodu sistem tarafından çağırılmasıdır. Bundle nesnelerini okumaya çalışmadan evvel mutlaka bu nesnelerin boş mu? Dolu mu? olduklarını kontrol etmeniz gerekir. Eğer boş ise, sistem yok edilmiş bir örnek oluşturmak yerine activitynin yeni bir örneğini oluşturur.
onCreate() metoduyla bazı durum verilerini nasıl yeniden yüklendiğini inceleyelim.
ÖRNEK:

@Override

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState); // Always call the superclass first

   

    // Check whether we're recreating a previously destroyed instance

    if (savedInstanceState != null) {

        // Restore value of members from saved state

        mCurrentScore = savedInstanceState.getInt(STATE_SCORE);

        mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);

    } else {

        // Probably initialize members with default values for a new instance

    }

    ...

}

onCreate() metodu yerine sistem tarafından onStart () metodunun hemen ardından çağırılacak olan onRestoreInstanceState() metoduyla yeniden yükleme işlemi yapmak isterseniz, Bundle nesnelerini kontrol etmenize gerek kalmaz.

ÖRNEK:

public void onRestoreInstanceState(Bundle savedInstanceState) {

    // Always call the superclass so it can restore the view hierarchy

    super.onRestoreInstanceState(savedInstanceState);

   

    // Restore state members from saved instance

    mCurrentScore = savedInstanceState.getInt(STATE_SCORE);

    mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);

}

UYARI:
Her zaman onRestoreInstanceState() metodunu superclass olarak uygulamalısınız böylece varsayılan uygulama ile view hiyerarşi durumunu kolaylıkla yeniden oluşturabilirsiniz.


Soru ve Görüşleriniz için: AndroidVeJava

14 Mart 2015 Cumartesi

Android-ActivityLifeCycleYönetimi-BirActivityYenidenOluşturmak

Bir Activitynin Yeniden Oluşturulması



                Normal kullanım sırasında activity’nizin yok edilmesi durumu ile ilgili, kullanıcı Back butonuna basarak geri dönmesi veya activity kendi içinde finish() metoduyla destroy işareti alması gibi birkaç senaryo mevcuttur. Ayrıca sistem kullanıcının uygulamanızdan uzun bir süre boyunca ayrılması durumunda veya diğer bir uygulamanın daha fazla sistem kaynağına ihtiyaç duyması halinde arka planda kalan uygulamaların kapatılması gerektiğinde bu işlemi kendiliğinden yapabilir.
                Yukarıdaki sebeplerden hangisi ile olursa olsun, activity örneğinin yok edilmesi sistem tarafından Activity örneğine daha fazla ihtiyaç duyulmadığının anlaşılmasıyla gerçekleşir. Ancak, sistem kısıtlamaları nedeniyle bir activity örneği yok edildiğinde, gerçek activity örneği yok olsa bile kullanıcı bu uygulamaya geri döndüğünde, bu activity yok edildiğinde son duruma ait kayıtlı verilerin de yardımıyla sistem yeni bir örnek oluşturarak bu activityi hatırlayabilir. Kayıtlı veri dediğim bu veriler, “instance state” dediğimiz bir önceki activity durumunu yeniden oluşturmak için sistem tarafından kullanılır ve bu veriler Bundle nesnesinde saklanan anahtar-değer çiftleri seti ( collection of key-value pairs) olarak bilinir.

UYARI:
                Activity’niz kullanıcını cihazı yatay veya dikey olarak her yönlendirmesinde yok edilip yeniden oluşturulur. Ekran yönlendirmesi her değiştiğinde, sistem her yönlendirme için ihtiyaç duyulan farklı ara yüz kaynaklarını yüklemek için bu işlemi gerçekleştirir.
Varsayılan olarak, Activity layout tasarımında yer alan her bir View öğesi için sistem Bundle kullanarak son durumları saklamaktadır. (Örneğin, EditText nesnesine girilen text değerinin otomatik olarak saklanması). Bu sayede, ekran yönlendirmesi her değiştiğinde hali hazırda girilmiş olunan veya mevcut durum bilgilerini kaydetmek için ayrıca bir kod yazmanıza gerek kalmaması sağlanmış olur. Ancak, activity’niz kaydetmek isteyebileceğiniz kullanıcının yapmış olduğu son işlemleri takip edebilmenize yarayacak bilgiler gibi çok daha fazla durum bilgisi içeriyor olabilir. Bunlar için SharedPreferences konularında anlattığımız yetenekleri kullanmanız gerekecektir.

NOT:
Android sistem tarafından view öğelerinize ait durumların yeniden yüklenmesi durumunda her bir view android:id niteliği ile tanımlanmış benzersiz bir id’ye sahip olması gerekir.

Activity durumu ile ilgili olarak ek veriler kaydetmek için, onSaveInstanceState() metodunu Override etmelisiniz. Sistem bu metodu çağırarak, kullanıcının uygulamanızı (activitynizi) terk ettiği anda bu verileri Bundle nesnelerine geçirir ve beklenmedik sonlanmalar meydana gelmesi ihtimaline karşın son durumların kaydedilmesini sağlar. Eğer sistem activity örneğini daha sonra yeniden oluşturursa, bu veriler aynı Bundle nesnelerinden olan onRestoreInstanceState() ve onCreate() metotlarının her ikisine de geçirilir.




                Sistem activitynizi durduracağı zaman onSaveInstanceState() metodunu çağırır (1). Burada activitynizin daha sonra yeniden başlatılırken ihtiyaç duyacağı durum bilgilerini kaydedersiniz. Sistem (1) de tanımlanan durum bilgilerini hem onCreate() metoduna hem de onRestoreInstanceState() metoduna geçirir.(3)

Activitynizin Durumunu Kaydetme


                Activityniz durdurulacağı zaman, sistem onSaveInstanceState() metodunu çağırır ve activityniz son durum bilgisini anahtar-değer çiftleri setine kaydeder. Bu metodun varsayılan uygulamasında View hiyerarşisine göre activitynin durumu hakkındaki bilgiler kaydedilir. (Örneğin, EditText içindeki bir text değeri veya ListView içindeki scroll konumu gibi)
                Activitynize ait fazladan durum bilgisi kaydetmek için, onSaveInstanceState() metodunu uygulamalı ve anahtar-değer çiftlerini Bundle nesnelerine eklemelisiniz.

ÖRNEK:

static final String STATE_SCORE = "playerScore";
static final String STATE_LEVEL = "playerLevel";
...

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
   
// Save the user's current game state
    savedInstanceState
.putInt(STATE_SCORE, mCurrentScore);
    savedInstanceState
.putInt(STATE_LEVEL, mCurrentLevel);
   
   
// Always call the superclass so it can save the view hierarchy state
   
super.onSaveInstanceState(savedInstanceState);
}

UYARI:
Her zaman onSaveInstanceState() metodunu superclass olarak uygulamalısınız böylece varsayılan uygulama ile view hiyerarşi durumunu kaydedebilirsiniz.

 

Activity Durumunu Yeniden Yüklemek


                Daha önce yok edilen activityniz yeniden oluşturulurken, sistem tarafından activitynizden Bundle nesnelerine geçirilen bilgiler dahilinde kayıtlı son durumu yeniden çağırabilirsiniz. onCreate() ve onRestoreInstanceState() metotlarının her ikisi de aynı Bundle kaynağından bu durum bilgilerini çeker.
                Bunun nedeni, activityniz ilk defa oluşturulurken veya daha önce yok edilen bir örnek yeniden oluşturulurken onCreate() metodu sistem tarafından çağırılmasıdır. Bundle nesnelerini okumaya çalışmadan evvel mutlaka bu nesnelerin boş mu? Dolu mu? olduklarını kontrol etmeniz gerekir. Eğer boş ise, sistem yok edilmiş bir örnek oluşturmak yerine activitynin yeni bir örneğini oluşturur.
onCreate() metoduyla bazı durum verilerini nasıl yeniden yüklendiğini inceleyelim.
ÖRNEK:

@Override

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState); // Always call the superclass first

   

    // Check whether we're recreating a previously destroyed instance

    if (savedInstanceState != null) {

        // Restore value of members from saved state

        mCurrentScore = savedInstanceState.getInt(STATE_SCORE);

        mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);

    } else {

        // Probably initialize members with default values for a new instance

    }

    ...

}

onCreate() metodu yerine sistem tarafından onStart () metodunun hemen ardından çağırılacak olan onRestoreInstanceState() metoduyla yeniden yükleme işlemi yapmak isterseniz, Bundle nesnelerini kontrol etmenize gerek kalmaz.

ÖRNEK:

public void onRestoreInstanceState(Bundle savedInstanceState) {

    // Always call the superclass so it can restore the view hierarchy

    super.onRestoreInstanceState(savedInstanceState);

   

    // Restore state members from saved instance

    mCurrentScore = savedInstanceState.getInt(STATE_SCORE);

    mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);

}

UYARI:
Her zaman onRestoreInstanceState() metodunu superclass olarak uygulamalısınız böylece varsayılan uygulama ile view hiyerarşi durumunu kolaylıkla yeniden oluşturabilirsiniz.


Soru ve Görüşleriniz için: AndroidVeJava