ACTIVITY SINIFI :MobileCoder I MobileCoder.NET I Mobil Programlama I Android Programlama I Mobil Geliştiricilerin Buluşma Noktası I www.MobileCoder.Net

ACTIVITY SINIFI

04.04.2015 tarihinde Android Programlama kategorisine eklenmiş, 86 views Kişi Okumuş ve 0 Yorum Yapılmış.

Activity :  Uygulamanın görsel sunum kısmıdır. Kullanıcının gördüğü ekranı activity olarak adlandırabiliriz. Kullanıcı ekranlar arası geçiş yaparken aslında activityler arası geçiş yapmaktadır. Activity, bir yaşam döngüsüne sahiptir. Uygulama başladığında, durdurulduğunda, kapatıldığında tetiklenmek üzere hazırlanmış fonksiyonlara sahiptir. Bu fonksiyonları sizin tetiklemenize gerek yoktur. İşletim sistemi tarafından otomatik tetiklenir.

Activity Sınıfı:

Activity, androidde sayfalara karşılık gelir. Activitylerstack mantığıyla çalışır. En son açılan en üsttedir, ilk açılan en alttadır.

3.Activity
2.Activity
1.Activity

Activity sınıfı tarafından oluşturulan nesneler uygulama içinde kullanılan ekranları temsil ederler. Kullanıcı yeni bir ekrana geçtiğinde Context.startActivity metoduyla bu ekran başlatılır. Eğer yeni Activity, AndroidManifest dosyasında tanımlı değilse uygulamamız çökecektir.


<activity

android:name=".MainActivity"

android:label="@string/title_activity_main">

<intent-filter>

<actionandroid:name="android.intent.action.MAIN"/>

<categoryandroid:name="android.intent.category.LAUNCHER"/>

</intent-filter>

</activity>

Her uygulamanın LAUNCHER olarak tanımlı bir Activity sınıfı olmalıdır. Bu şekilde tanımlanmış bir Activity, uygulama ilk açıldığında otomatik olarak harekete geçer ve kullanıcının karşısına çıkan ilk ekran olur.

Activity dosyaları ilk çalıştıklarında onCreate metodu devreye girer. Bu metotta genel olarak setContentView metodu çalıştırılarak bir layout dosyasından ekran tasarımı yüklenir. Eğer ekran ilk oluştuğunda tanımlanması gereken başka değişkenler ve aksiyonlar varsa, onlar da onCreate metodu içinde gerçekleştirilebilirler.


@Override

<strong>public</strong><strong>void</strong>onCreate(Bundle savedInstanceState){  

<strong>super</strong>.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);}

Bir zaman diliminde sadece bir activity çalışır. Activity‘nin yaşam döngüsünü aşağıdaki grafik ile özetleyebiliriz.

 

activity_yaşam_döngüsü_şablon--1

Activity Yaşam Döngüsü

 

>>onCreate dışında bir Activity’nin yaşam döngüsü içerisinde başka metotlar da harekete geçirilir. Bu metotları sıralarsak;

  • onCreate : Activity ilk oluşturulduğunda çağırılır. Activity herhangi bir nedenden ötürü yok edilmezse (bellek ihtiyacı ya da finish metodu) bir daha çalıştırılmaz.
  • onStart :onCreate metodu çalıştırılıp görsel öğeler oluştuktan sonra çağırılır.
  • onResume :Activity herhangi bir sebepten dolayı durdurulduysa (başka bir ekrana geçiş) tekrar ekrana geldiğinde bu metot harekete geçer. Activity çalıştırılmadan önce harekete geçen son metottur. Bu metottan sonra belirlenen koda göre Activity yaşamına başlar.
  • onPause : Activity bir sebepten dolayı arka plana atılırsa harekete geçer. BuBack tuşuna basılmasından ya da sistemin bellek ihtiyacından kaynaklanabilir. Bu metot içerisinde anlık bilgilerin kaydedilmesi önerilir. onPause işlemi hızlı çalışmak zorundadır, çünkü buradaki işlem bitmeden bir sonraki Activity harekete geçmez.
  • onStop: Activity arka plana atıldığı anda işleme girer. Bu noktada iki seçenek vardır; ya kullanıcı yeni ekrandaki işini bitirip geri gelir ya da Activity tamamen kapatılır. Kullanıcı geri geldiği takdirde onRestart metoduna geçilir ve döngü onStart metodundan tekrar başlar. Eğer kullanıcı geri gelmeyecekse onDestroy metodu çalıştırılır.
  • onDestroy : Activity’e ait bütün kaynaklar yok edilir. Activity bu noktada yaşam döngüsünü tamamlamıştır.

>Yukarıdaki metotlar bir Activity’nin yaşamını kontrol etmemize yardımcı olur. Özellikle kullanıcı bir ayarı kaydediyorsa ya da oyun oynuyorsa ve bu sırada bir telefon konuşması başlayacaksa anlık durumları kaydetmemiz için bu metotların çalışma esaslarını bilmeliyiz.

>Herhangi bir ekranın Activity sınıfı tarafından oluşturulması yeterlidir. Ancak bunun yanında Android işletim sistemi, sık kullanılan ekranlara özel Activity sınıfları sağlar. Bunlara göz atarsak;

  • ListActivity : Bir veri tabanındaki veriyi listelemek ya da sunucudan gelen veriyi kullanıcıya göstermek, uygulamalarda oldukça sık rastlanan işlemlerdir. Bunun için Android işletim sistemi bize ListActivity sınıfını sunar. Standart bir layout dosyasından oluşturulan bu ekran sayesinde elimizdeki veriyi oldukça rahat bir şekilde görüntüleyebiliriz.
  • MapActivity:Harita uygulamaları için sık kullanılan bir Activity  Google Maps haritaları üzerinde işlem yapacağımız bir uygulamamız varsa bu Activity bize yardımcı olacaktır.
  • PreferenceActivity : Android işletim sistemine benzer bir kullanıcı ayar menüsü yapmayı hedefliyorsak, PreferenceActivity’den faydalanabiliriz. PreferenceActivity layout dosyasında vereceğimiz yapıya göre sunulan seçenekleri alt kategorilerle ekrana getirir. Aynı zamanda kullanıcının saklayacağı değerleri, her değere özel bir anahtar atayarak (key – value) bellekte otomatik olarak saklar.

BİR ACTIVITY’İ YENİDEN YARATMA

Uygulamada çeşitli yollarla (kullanıcının geri tuşuna basması, Activity’nin finish() metodunu çağırması gibi) Activity’nin sonlanması ya da İngilizce tabiriyle “destroy” olması, gayet doğal bir işlemdir. Sistemin daha fazla belleğe ihtiyacı olduğunda ya da Activity çok uzun süredir çalıştığı için durdurulabilir. Bu eğitim belgesinde sonlanan bir Activity’nin yeniden nasıl başlatılacağını anlatacağız.

Activity, kullanıcının geri tuşuna basması ya da kendini sonlandırması (finish()) durumlarında tamamıyla kaybolur çünkü sistem Activity’nin artık gerekli olmadığını farz eder. Activity sistem tarafından sonlandırıldıysa Activity de bulunan verileri saklayıp, kullanıcı geri dönmek istediğinde yeniden Activity oluşturarak bu verileri ona yükler. Activity’nin hangi adımda olduğunu sakladığı için yine o duruma gelerek kullanıcının kaldığı son ekranı gösterir. Sistem tarafından korunan veriler Bundle objesinde anahtar-değer çiftleriyle tutulur.

Normalde sistem Bundle kullanarak uygulamanın Activity layout’unda bulunan tüm view nesnelerini saklar (editext’e girilen değer gibi). Eğer Activity’niz sonlanır ve yeniden başlatılırsa layout dosyasındaki nesnelerin son değerleri korunur. Sizin kodunuzu gerektirmeyen bu özellikle birlikte kullanıcı deneyiminin artırılması ve uygulamanın daha verimli çalışması için daha fazla veri ve durumun kazanılması gerekebilir, bunun için Activity’nin ilerleyişini çeşitli değişkenlerle saklamanız gerekmektedir.

Android sisteminin son durum değerlerini kurtarabilmesi için tüm View’lar android: id niteliğinden sağlanan benzersiz (unique) ID’ye sahip olmak zorundadır.

Activity durumları için daha fazla veri kaydetmek isterseniz,onSaveInstanceState() callback methodunu ezmeniz (override) gerekmektedir. Sistem, kullanıcı Activity’den çıktığında metodun sakladığı verileri Bundle nesnesine yükleyerek, sistem Activity’yi yeniden oluşturmak durumunda kalırsa onRestoreInstanceState() veya onCreate() metodunu çağırdığında aynı Bundle nesnesini kullanır.

 

activity_yeniden_yaratma_şablon--2

Activity Yeniden Yaratma

 

Activity State’inin kaydedilmesi

Uygulamanızın Activity’si durmaya başladığında, sistem tarafından onSaveInstanceState() metodu çağrılır, bu yolla uygulamanızın Activity state’ini anahtar-değer çiftleriyle kaydedebilirsiniz. Metodun olağan gerçeklemesinde (defaultimplementation) Activity’nin durumunu View hiyerarşisine göre kaydedilir. Örneğin EditText içerisindeki bir değer ya da ListView öğesi içinde ekranın kaydırılma miktarının kaydedilmesi gibi.

Eğer Activity’nin daha fazla durum bilgilerini kaydetmek istiyorsanız, onSaveInstanceState() metoduna yeni kod eklemeleri yaparak Bundle nesnesine anahtar-değer çifti belirtmek durumundasınız. Kod örneğimizle konu daha iyi anlaşılacaktır:

 

 


</strong><strong>Static final </strong>String SKOR_DURUMU="oyuncu_skoru";

<strong>Static final </strong>String SEVIYE_DURUMU="oyuncu_seviyesi";... 

@Override

<strong>Public</strong><strong>void </strong>onSaveInstanceState(Bundle savedInstanceState){

<em>// kullanıcının o anki durumunu kaydediyoruz</em>savedInstanceState.putInt(SKOR_DURUMU, mCurrentScore);savedInstanceState.putInt(SEVIYE_DURUMU, mCurrentLevel); 

<em>// Her zaman superclass'ı çağırarak methodun temel işlevini de yerine getirmesini sağlıyoruz </em>

<strong>super</strong>.onSaveInstanceState(savedInstanceState);}

Dikkat: Her zaman onSaveInstanceState()’in superclass’ını çağırmalısınız ki, metodun varsayılan gerçeklemesi View hiyerarşisinin durumunu da kaydedebilsin.

Activity State’ini yeniden yüklemek

Activity’niz yeniden yaratıldığında, yok edilmeden önceki Bundle nesnesine kaydedilmiş durum bilgilerini yükleyebilirsiniz. onCreate() ve onRestoreInstanceState() metodları çağrıldığında Bundle nesnesinin üzerinden geçerek durum bilgisini yeniden yüklerler. Sistem tarafından Activity’nizin yeni bir instance’i (sınıf örneği) oluşturulduğunda ya da sistem önceki Activity’yi yeniden yarattığında onCreate() metodu çalışacaktır. onCreate() metodu çağrıldığında Bundle nesnesinin null (boş) olup olmadığını kontrol etmelisiniz. Eğer null ise sistem yeni bir Activity oluşturur. Eğer Bundle null değilse eski Activity’nin değerlerini yükleyecektir. Örneğimizle bir Activity’nin Bundle nesnesi boş değilse eski değerleri nasıl yüklediğimizi görelim:


@Override
protectedvoidonCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);// her zaman öncelikle superclass'ı çağırıyoruz

// önceden yok edilen instance'i yaratıp yaratmadığımızı kontrol edelim

If(savedInstanceState!=null){

// kaydedilen eski activity değerlerini yüklüyoruz.
mCurrentScore=savedInstanceState.getInt(SKOR_DURUMU);
mCurrentLevel=savedInstanceState.getInt(SEVIYE_DURUMU);
}else{
// yeni bir activity yaratıyoruz
}
 ...
}

 

onCreate metoduyla bilgileri yeniden yüklemek yerine onRestoreInstanceState() metoduyla durum bilgilerini getirebilirsiniz. Sistem onStart metodu sonrası otomatik olarak bu metodu çağırdığı için Bundle’ınnull olup olmadığını kontrol etmek zorunda kalmazsınız. Örneğimizle bu metodu nasıl kullanıldığını görebilirsiniz:

</pre>
<pre>publicvoidonRestoreInstanceState(Bundle savedInstanceState){

// view hiyerarşinin korunması için her zaman öncelikle superclass'ı çağırıyoruz.

super.onRestoreInstanceState(savedInstanceState);

// kaydedilen durumların yeniden yüklenmesi

mCurrentScore=savedInstanceState.getInt(SKOR_DURUMU);

mCurrentLevel=savedInstanceState.getInt(SEVIYE_DURUMU);

}

 

 

Dikkat: onRestoreInstanceState() metodunda view hiyerarşinin korunması için her zaman öncelikle superclass’ı çağırıyoruz.

BETÜL PETEK – DENİZ YÜZGEÇ

Kaynaklar;

Yazar Hakkında

Yazar : DENIZ YUZGEC-BETUL PETEK

Yazar Hakkında :

Yazarın Tüm Yazıları İçin Tıklayınız

Yorumlar

Sitemizde En Çok Okunan İçerikler

ANDROİD TELEFONLARA ROOT ATMA
ANDROİD TELEFONLARA ROOT ATMARoot Ne demek ? Bir android cihazı root etmek telefonun
fragment
ANDROİD FRAGMENT YAPISI VE KULLANIMIFragmentler Activity içerisinde yer alan kullanıcı ara yüzleridir. Fragment
Asp.NET’de web servis hazırlama ve Android de kullanimi  Web Servis Nedir ? Web üzerinden HTTP protokolü ile hizmet
ANDROİD TELEFONLARDA KONFERANS GÖRÜŞME
ANDROİD TELEFONLARDA KONFERANS GÖRÜŞMEANDROİD TELEFONLARDA KONFERANS GÖRÜŞME   Konferans görüşme çok fazla bilinmeyen androidin

Sitemizde En Çok Yorumlanan İçerikler

Rating Bar Kullanımı
Rating Bar KullanımıAndroid’de yıldız şeklinde derecelendirme çubuğu olarak kullanılır. Kullanıcı sürükleme
Android Wear Emülatör Kurulumu
Android Wear Emülatör Kurulumu   Android studio da geliştireceğimiz uygulamaların kontrolunü yapmak için emülatör
Resim Galerisi Oluşturma
Resim Galerisi OluşturmaAndroid Programlama – Resim Galerisi Oluşturma Bu yazıda, bir galeri
SQLite Database Browser Kullanımı
SQLite Database Browser KullanımıSQLite Database Browser Kullanımı Merhaba arkadaşlar, Android uygulamaları geliştirirken uygulama üzerindeki

Son Yapılan Yorumlar

  • Kategoriler

  • Son Yazılar

  • Takvim

    Eylül 2017
    P S Ç P C C P
    « Kas    
     123
    45678910
    11121314151617
    18192021222324
    252627282930  
  • Etiketler

  • Son Yorumlar

    • Arşivler

    • Meta