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.

15 Ekim 2015 Perşembe

ANDROID VE JAVA'DA TEMEL KAVRAMLAR-2



        Android ile çalışırken karşılaşacağınız kavramlar;




Activity: Html hakkında bilginiz var ise benzetim yoluyla bu kavramı anlatalım şöyle ki, her bir *.html dosyası kendi başına bir sayfadır ve etkileşime geçtiğinde ilgili sayfalara yönlendirir. Aynı şekilde Actvity'lerde tek bir sayfayı temsil eder ve çalışmalarınızı gerçekleştirirken Actvity bazlı geliştirip etkileşimi sağlamanız gerekecektir.

Intent:  Intent'in kelime karşılığı niyet, amaç demektir. Android'in diğer Activity'ler veya herhangi bir bileşenine erişirken bu kavramı kullanmamız gerekiyor. İki çeşit Intent karşımıza çıkacaktır. Bunlardan birinci Explicit Intent(Açık Niyet), ikincisi ise Implicit Intent(Kapalı Niyet) Explicit intentin kullanım amacı uygulamanıza yerleştirdiğiniz fonksiyonun hangi uygulama ile devam ettirileceğine siz karar verebiliyorsanız bu intent Explicit Intent ile sağlanır. Örneğin, Maps uygulaması ile etkileşime geçerken varsayılan olarak Google Maps uygulamasını yazılımcı olarak doğrudan tanımlamanız bu intent türüne girer. Implicit Intent ise yine aynı uygulama için cihazda hangi map uygulamasının kullanılacağına kullanıcının karar vermesini isterseniz bu kullanımda Implicit Intent olur.



Service:  Bu bileşen ile doğrudan kullanıcı ile etkileşim halinde olmayan veye  arka planda çalışabilen bir uygulama geliştirebilirsiniz. Örnek verecek olur isek, bir müzik çalar geliştirdiniz ve kullanıcının uygulamanız ile müzik dinlerken aynı anda farklı bir uygulamaya geçtiğinde müzik çalarınız kapanmasın istiyorsanız bu uygulamayı service olarak geliştirmeniz size yardımcı olacak çözümdür.


Broadcast Receivers: Bu bileşen, uygulamanızın android ile haberleşmesinde kullanacağınız bir özelliktir. Bu özellik ile geliştirdiğiniz uygulamanız android'de gerçekleşen işlemleri dinleyip, aynı şekilde dinlemede olan diğer uygulamalar ile etkileşime geçebilir olacaktır.
Örneğin, telefonunuz kulaklığın takıldığını veya gelen bir sms'i Broadcast Receiver bileşeni ile algılar.

Content Providers: Uygulamanızı geliştirdiğiniz zaman, uygulamanıza ait bileşenler (veritabanı gibi) sadece uygulamanızın erişimine açıktır. Eğer bu bileşen kullanırsanız uygulamanıza ait veritabanı diğer uygulamalar ve işletim sistemi tarafından erişilebilir olacaktır. Android sağladığı bazı içerik sağlayıcılar, Contacts Provider, Settings Provider vb..

Application Context: Yukarıda saydığımız bileşenlerden bir kaçı veya tamamı bir araya gelerek uygulama ortamınız meydana getirir. Yukarıdaki tüm bileşenler bu içerikten türetilmiştir.

Bütün bu bileşenleri uygulamanıza eklerken uygulamanızın bu bileşenleri kullanabilmesi için tanıtılması gerekir. Bu işlemin yapıldığı dosya olan AndroidManifest.xml dosyasını bir sonraki yazımızda açıklayacağız Hoşçakalın...

Soru ve Görüşleriniz için FB: Android ve Java
, , , ,

ANDROID VE JAVA'DA TEMEL KAVRAMLAR-1



       Uzun bir aradan sonra tekrar sizlerle birlikteyiz. developer.android.com adresindeki kaynakların tercümesini hazırlarken aynı anda android ve java dünyasına ait temel kavramlar hakkında bilgilendirme yapmamız gerekiyor. Lafı çok fazla uzatmadan konumuza giriş yapalım..

       Java Hakkında 

       Java, Sun Microsystems mühendislerinden James Gosling tarafından geliştirilmeye başlanmış açık kodlu, nesneye yönelik, zeminden bağımsız, yüksek verimli, çok işlevli, yüksek seviye, adım adım işletilen (yorumlanan-interpreted) bir dildir.
Java, Sun Microsystems'den James Gosling tarafından geliştirilen bir programlama dilidir (Sun Microsystem'in şu anda Oracle Corporation ile bağlı ortaklığı bulunmaktadır) ve 1995 yılında Sun Microsystems'in çekirdek bileşeni olarak piyasaya sürülmüştür. Bu dil C ve C++'dan birçok sözdizim türetmesine rağmen bu türevler daha basit nesne modeli ve daha az düşük seviye olanaklar içerir. Java uygulamaları bilgisayar mimarisine bağlı olmadan herhangi bir Java Virtual Machine (JVM)'de çalışabilen tipik bytecode'dur (sınıf dosyası).
Java ilk çıktığında daha çok küçük cihazlarda kullanılmak için tasarlanmış ortak bir düzlem dili olarak düşünülmüştü. Ancak düzlem bağımsızlığı özelliği ve tekbiçim kütüphane desteği C ve C++'tan çok daha üstün ve güvenli bir yazılım geliştirme ve işletme ortamı sunduğundan, hemen her yerde kullanılmaya başlanmıştır. 

Bir Java yazılımı şu şekilde geliştirilir;
  • Yazılımcı ve bilgisayar mühendisleri Java kodunu yazar.
  • Bu kod bir Java derleyicisi ile derlenir. Sonuçta "bytecode" adı verilen bir tür sanal makine kodu ortaya çıkar. Düzlem bağımsızlığını sağlayan bytecode'dur. Çünkü bir kere bytecode oluştuktan sonra yazılım sanal makine içeren tüm işletim sistemlerinde çalışabilmektedir.
  • Bu bytecode Java Sanal Makinesi (İng., Java Virtual Machine) tarafından işletilir. Bu aşama, her bir bytecode komutunun teker teker yorumlanması ile icra edilebileceği gibi, anında derleme kullanılarak da gerçekleştirilebilir.

         Java Sözdizimi

// MerhabaDünya.java
 public class MerhabaDünya{
     public static void main(String[] args) {
         System.out.println("Merhaba Dünya!");
     }
 }

       Android Hakkında   

        AndroidGoogleOpen Handset Alliance ve özgür yazılım topluluğu tarafından geliştirilmiş olan, Linux tabanlı, mobil cihaz ve cep telefonları için geliştirilmekte olan, açık kaynak kodlu bir mobil ücretsiz bir işletim sistemidir. Sistem açık kaynak kodlu olsa da, ufak ama çok önemli kısmın google tarafından kodları kapalıdır, google bu kısmın kendisi dışında ulaşılmasını istememektedir. Desteklenen uygulama uzantısı ".apk"dir. Google tarafından ücretsiz olmasının sebebi, sistemin daha hızlı ve çabuk gelişmesi, birçok popüler marka tarafından kullanılması ve bu sayede reklamlarını daha fazla kişiye ulaşmasını sağlamaktır. Google bir reklam firmasıdır, reklam alarak para kazanır, android sistemi üzerinde çalışan Google Play marketteki oyun ve uygulamalar üzerinde aldığı reklamları yayınlamaktadır, bu şekilde daha fazlasını kazanmaktadır.
       Android, aygıtların fonksiyonelliğini genişleten uygulamalar yazan geniş bir geliştirici grubuna sahiptir. Android için halihazırda 1 milyondan fazla uygulama bulunmaktadır. Google Play Store ise, Android işletim sistemi uygulamalarının çeşitli sitelerden indirilebilmesinin yanı sıra, Google tarafından işletilen kurumsal uygulama mağazasıdır. Geliştiriciler, ilk olarak aygıtı, Google'ın Java kütüphanesi aracılığıyla kontrol ederek Java dilinde yazmışlardır.
       Android, Linux çekirdeği üzerine inşa edilmiş bir mobil işletim sistemidir. Bu sistem ara katman yazılımı, kütüphaneler ve API C diliyle yazılmıştır. Uygulama yazılımları ise, Apache harmony üzerine kurulu Java-uyumlu kütüphaneleri içine alan uygulama iskeleti üzerinden çalışmaktadır. Android, derlenmiş Java kodunu çalıştırmak için dinamik çevirmeli (JIT) Dalvik sanal makinesini kullanır ve cihazların fonksiyonelliğini artıran uygulamaların geliştirilmesi için çalışan geniş bir programcı-geliştirici çevresine sahiptir. Google aynı zamanda işletim sistemindeki hataları bulan kullanıcıları para ödülü ile ödüllendirmektedir.

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

28 Nisan 2015 Salı

Learn English For Kids - Çocukların İngilizce Öğreniminde Büyük Kolaylık

Herkese Merhabalar!



İlk android projem olan Learn English For Kids uygulamasını sizlere tanıtmaktan memnuniyet duyarız. Bu uygulamamız ile çocuklarımız okul öncesi dönemde, çevresinde karşılaşabileceği bazı hayvanlar, meyveler, sayılar ve renklere ait temel terimleri öğrenebileceği, öğrenirken de eğlenceli vakit geçireceği faydalı bir araçtır. 

Uygulamamız içeriği 1 adet öğrenme etkinliği ve 3 adet mini oyundan oluşmaktadır. Bu oyunlar;

·         Learning: Bu etkinlik ile çocuklarımız hayvanlar, sayılar, renkler ve meyvelerden oluşan kategorilerden bir tanesini seçerek, öğrenme sürecini başlatır. Bu kısımda görsel olarak ekrana gelen 4 çeşit seçenek içinden istenilene tıklanarak sesli olarak okunuşu, yazılı olarak da doğru şekilde yazılışının öğrenilmesi amaçlanmaktadır.

·         Exercise:  Bu etkinlik, çocuğumuzun “Learning “ kısmında edindiği öğrenimleri pekiştirmesi amacıyla tasarlanmıştır. Bu etkinlik sırasında ekrana gelen 4 üründen bir tanesine ait soru, ürünler altında ekrana getirilir. Bu şekilde ekrana getirilen soru ile çocuğumuzun doğru cevabı seçmesin isteriz ve böylece çocuğumuzun öğrendiği ürünlere ait doğru yazılışları öğrenme sürecini temin etmiş oluruz.

·         Listen&Guess:  Bu öğrenme etkinliği ile uygulama tarafından ekrana getirilen 4 adet üründen, bir tanesine ait olan okunuş bilgisi rastgele sorulur. Bu sorunun ardından çocuğumuzun doğru cevabı vermesi beklenir.  Bu etkinlik sayesinde öğrenme sürecine katılan temel terimlerin doğru okunuş ve telaffuzlarına ait öğrenme etkinliği gerçekleştirilmiş olur.


·         Speaking: Bu öğrenme etkinliğinde ise, çocuklarımızın “Learning” etkinliği ile öğrenmiş olduğu ürünlere ait doğru telaffuz edebilme becerisini kazandırmayı amaçlıyoruz.


Önemli Uyarı:
Uygulamamız tamamen çocukların kullanımına yönelik geliştirilmiş olup biz ebeveynlerin kontrolünde ve limitli zaman aralıklarında kullanılması tavsiye edilir. Aşırı elektronik cihaz kullanımı (PC, tablet, cep telefonu vb. )  çocuklarımızın sosyal gelişimine olumsuz etki eder.


Uygulamamız Google Inc.'nin hazırlamış olduğu uygunluk derecelendirme anketi ile derecelendirilmiştir.
,

16 Nisan 2015 Perşembe

Örnek Uygulama-Back Buton Handling

Back Button Handling-Geri tuşuna basma olaylarını ele alma


     İlk uygulamamızı tamamlamak için bir süre bloğumuzu ihmal ettik... Bildiğiniz gibi bu yola çıkarken sizler gibi Android'e aç bir şekilde yola çıktım ve nihayet ilk uygulamamız play store'de yerini aldı. Bu çalışma süresince öğrendiğim bilgileri sizlere zaman zaman aktaracağım. Bu bilgilerden bir tanesi de Back Button eylemleri hakkında olacak...


    Kimi cihazlarda software, kimi cihazlarda hardware olarak bulunan back buton ile yapmak istediğiniz herhangi bir işlem var ise (genelde çıkış veya bir önceki menü'ye geçiş olabilmektedir) bu işlemleri gerçekleştirmek çok basit...



     Bu eylemi yönetmek için yapmanız gereken tek şey;



 @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
                     //Burada alert.dialoga OLUMLU bir cevabınız olduğunda gerekli kodları yazın

        if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {

            try {
                AlertDialog.Builder alert = new AlertDialog.Builder(this);
                alert.setTitle("Are You Sure Want to Exit?");
                alert.setCancelable(false);
                alert.setPositiveButton("Yes",new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                        android.os.Process.killProcess(android.os.Process.myPid());
                    }
                });

                alert.setNegativeButton("No",new DialogInterface.OnClickListener() {

                     //Burada alert.dialoga OLUMSUZ bir cevabınız olduğunda gerekli kodları yazın
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(getApplicationContext(),
                                "Write Something else", Toast.LENGTH_SHORT).show();

                    }
                });
                alert.setNeutralButton("Rate US!",new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                        // Tercihen eklemek istediğiniz bir konu var ise burayı kullanın.
                    }
                });
                alert.create().show();
                return super.onKeyDown(keyCode,event);
            }
            catch (IllegalStateException e) {
                e.printStackTrace();
            }

            return true;


        }

        return true;
    }



     yukarıdaki kod bloğu ile back buton basıldığında "Are You Sure Want To Exit?" başlıklı bir alert dialog ekrana çıkıyor. Bu diyalog içerisinde 3 adet buton yer alabilmektedir. Bunlar "positive","negative" ve "neutral" şeklindedir. Bu seçenekler altına yapılmasını istediğiniz işlemleri ekleyerek back butona kontrolü sağlamış olursunuz.

     Fırsat buldukça pratik örnek uygulamalar yayınlamaya devam edeceğim.

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

Herkese iyi günler 
, ,

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
, , , , , , , , , ,

Android-ActivityLifeCycleYönetimi-BirActivityDurdurmakVeYenidenBaşlatmak

Bir Activity Durdurmak ve Yeniden Başlatmak


                Düzenli bir durdurma ve yeniden başlatma işlemi kullanıcın activity’nize geri döndüğünde sürekli aktif ve kullanıcı bilgilerinin korunması için önemli bir işlem sürecidir. Activity’nizin durdurulup yeniden başlatılmaya ihtiyaç duyacağı birkaç senaryodan bazıları aşağıdaki gibi olabilir.
·         Kullanıcı Recent Apps( son kullanılan Uygulamalar) menüsünü açıp farklı uygulamalara geçiş yapabilir. Bu durumda uygulamanızın ekranda bulunan activity örneği durdurulur. Kullanıcı ana ekranda yer alan bulunan uygulama ikonunuza dokunduğunda veya Recent Apps penceresinden geri geldiğinde activity yeniden başlatılır.
·         Kullanıcı uygulamanız içinden yeni bir activity başlatacak bir işlem gerçekleştirdiğinde mevcut activity durdurulur ve diğer activity başlatılır. Kullanıcı back butonun bastığında ilk activity tekrar başlatılır.
·         Kullanıcı uygulamanızı kullandığı anda bir çağrı alınca…

Activity sınıfı, uygulamanızın durdurulması ve yeniden başlatılması gibi durumlarda uygulamanızın nasıl davranacağına karar vermek için onStop() ve onRestart() gibi iki yaşam döngüsü metodu tanımlar. Paused durumdan farklı olarak, (kısmen UI arka plana itildiği durum olarak tanımlanan) stopped durum UI nin tamamen arka plana atılmasını ve hiçbir şekilde görünmemesini garanti ederek activity den kullanıcının dikkatini tamamen keser.

NOT:
Sistem Activityniz stopped duruma geçtiğinde bu activitynin bir örneğini bellekte sakladığı için, onStop() veya onRestart() metodunu uygulamanıza gerek kalmaz. Hatta onStart() metodunu bile uygulamanız gerekmeyebilir. Birçok activity nispeten basittirler ve çok rahat bir şekilde durdurulup başlatılabilirler ve size sadece süregelen işlemleri durdurmak için onPause() metodunu kullanmak kalır.



     Kullanıcı activity’nizden ayrıldığında, sistem onStop() metodunu çağırarak activity i durdurur(1). Activity durdurulduğunda kullanıcı geri gelirse, sistem onRestart()(2) metodunu çağırır ve bunu hızlıca onStart()(3) ve onResume()(4) metodu takip eder. Dikkat etmeniz gereken asıl konu ise ne türlü bir senaryo gerçekleşecek olursa olsun, sistem onStop() metodundan evvel onPause() metodunu çağırır.

Activity Durdurmak


                Activity’niz onStop() metodunu çağırdığında, bu demek oluyor ki artık bu activity daha fazla görünmeyecek ve kullanıcının ihtiyaç duymadığı ne kadar kaynak var ise serbest bırakılacak demektir. Activity’niz durdurulduğunda, sistem kaynağına ihtiyaç var ise bu activity örneği yok edilecektir. Diğer bellek gerektiren ekstra durumlarda, sistem uygulamanızı onDestroy() metodunu çağırmaya ihtiyaç duymadan sonlandırabilir. Bu nedenle onStop() metodunu kullanmanızdaki en büyük fayda sistemin bu yola başvurmadan evvel sizin sistem kaynaklarını serbest bırakmanızdır.
                onPause() metodu onStop() metodundan evvel çağırılmasına rağmen, aşırı sistem kaynağını tüketen işlemleri sonlandırmak için onStop() metodunu kullanmanız her zaman daha verimli bir işlem olacaktır.

                Aşağıdaki örnekte, onStop() metodunun bir uygulaması görülmektedir. Bu uygulama ile geçici belleği not defterinde tutulan kayıtların kaydedilme işlemi icra ediliyor.

ÖRNEK:
@Override
protected void onStop() {
    super.onStop();  // Always call the superclass method first

    // Save the note's current draft, because the activity is stopping
    // and we want to be sure the current note progress isn't lost.
    ContentValues values = new ContentValues();
    values.put(NotePad.Notes.COLUMN_NAME_NOTE, getCurrentNoteText());
    values.put(NotePad.Notes.COLUMN_NAME_TITLE, getCurrentNoteTitle());

    getContentResolver().update(
            mUri,    // The URI for the note to update.
            values,  // The map of column names and new values to apply to them.
            null,    // No SELECT criteria are used.
            null     // No WHERE columns are used.
            );
}

                Activity’niz durdurulduğunda, Activity nesnesi bellekte bir yer tutar ve yeniden çağırıldığında activity devam eder. Bu süreç içerisinde uygulamanızın bileşenlerini yeniden hazırlamanız gerekmemektedir. Sistem ayrıca mevcut duruma ait her bir View’in izini de saklar. Böylece kullanıcı EditText öğesine bir veri girişi yaptığında bu otomatik olarak, sizin herhangi bir saklama prosedürü uygulamanıza gerek kalmadan saklanır.

NOT:
Stopped durumda sistem activity’nizin yok etse bile, bu activitye ait View nesnelerinin durumlarını Bundle içerisinde korur ve kullanıcı aynı activity örneğine geri döndüğünde UI nin son haliyle uygulama çalışmaya devam eder. ( Bir sonraki konuda Bundle hakkında daha detaylı bilgi aktaracağız)

Bir Activity’nin Başlatılması/Yeniden Başlatılması


                Activityniz Stopped durumdan tekrar ön plana geldiğinde, onRestart() metoduna geçer. Ayrıca sistem, activityniz her ön plana geldiğinde olduğu gibi onStart() metodunu da çağırır. onRestart() metodu sadece activity stopped durumdan devam ederken çağırılır. Böylece öncelikle stopped duruma geçen uygulamanız için bazı özel restorasyonları gerçekleştirme imkânı elde etmiş olursunuz.
                Uygulamanın activity durumunu onRestart() metodu ile restore etmesi aslında çok yaygın bir kullanım değildir. Çünkü genel uygulama dünyasında bu tarz bir yönetime pek ihtiyaç duyulmamaktadır. onStop() metodu activitynizin kullandığı tüm kaynakları temizlemek için uygulanmalıdır. Ancak bu işlem sonrası Activity yeniden çağırıldığında durdurduğunuz tüm işlemleri yeniden hazırlamanız gerekecektir. Bunun yanında Activity’niz yeniden oluşturulduğu durumlarda da bu hazırlıkları yapmanız gerekcektir.( hiçbir şekilde activity örneğinizin olmadığı durum). Bu nedenle, onStop() metoduna karşılık olarak her zaman onStart() metodunu kullanmalısınız. Böylece hem onRestart() metodunu hem de onStart() metodunu kullanmak durumunda kalmamış olursunuz. Çünkü sistem yukarıda bahsettiğimiz gibi activitye dönüldüğü anda, onStart() metdounu her iki durumda da çağıracaktır.

Kullanıcı uygulamanızdan uzun süreliğine ayrıldığında, uygulamanıza geri dönmeden evvel onStart() metodu gerekli sistem ihtiyaçlarını ve özelliklerini doğrulamak için doğru metot olacaktır.

ÖRNEK:
@Override
protected void onStart() {
   
super.onStart();  // Always call the superclass method first
   
   
// The activity is either being restarted or started for the first time
   
// so this is where we should make sure that GPS is enabled
   
LocationManager locationManager =
           
(LocationManager) getSystemService(Context.LOCATION_SERVICE);
   
boolean gpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
   
   
if (!gpsEnabled) {
       
// Create a dialog here that requests the user to enable GPS, and use an intent
       
// with the android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS action
       
// to take the user to the Settings screen to enable GPS when they click "OK"
   
}
}

@Override
protected void onRestart() {
   
super.onRestart();  // Always call the superclass method first
   
   
// Activity being restarted from stopped state    
}

Sistem activitynizi yok ettiğinde, Activity için onDestroy() metodunu çağırır. onDestroy() metodunun çağırılmasına ihtiyaç kalmıyor, çünkü genellikle uygulamanızın kullanmış olduğu birçok sistem kaynaklarının onStop() metodunda durdurulması gerekmektedir. Fakat bu metot sistem kaynaklarının gereksiz kullanımını durdurmak için son şansınız demektir. Bu metot ile en son durdurmak isteyeceğiniz işlemleri tanımlamanız cihaz sistem kaynakları için çok önemlidir. Bunun üzerinde durmamızın sebebi uygulamanızın çalışma performansını ve kullanıcı deneyimin yüksek düzeyde tutmayı amaçlamamızdır.


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

Android-ActivityLifeCycleYönetimi-BirActivityDuraklatmakVeDevamEttirmek

Bir Activity Duraklatmak ve Devam Ettirmek


                Normal uygulama kullanımı sırasında, ekranda aktif olan activity diğer görsel bileşenler tarafından arka plana itilir ve activty’i pause konumuna geçirir. Örneğin, yarı-transparan bir activity (dialog kutuları gibi) açıldığında, bir önceki activity pause edilir. Diğer activity ekranda kaldığı sürece asıl ekran dikkat dışıdır ve paused (duraklatılmış) konumda bekler.
                Activity tamamen görünmez olur ve arka plana geçirilirse, Stopped(durdurulmuş) konuma geçer. (Bir sonraki konu bununla alakalı olacak)
                Activity’niz paused duruma geçtiğinde, sistem uygulamanızın sürdürdüğü işlemleri durdurmak için veya kullanıcının son işlemlerini kaydetmek için kullanabileceğiniz activity’niz içinde kodlanmış olan onPause() metodunu çağırır. Eğer kullanıcı paused durumdan activity’e geri dönüş yaparsa sistem uygulamanıza devam etmek için onResume() metodunu çağırır.

NOT:
Activity’niz onPause() metodunu çağırdığı anda, bu kullanıcını bir süre sonra uygulamanıza veya activity’nize geri döneceği anlamına gelir. Ancak genelde böyle olmaz ve kullanıcı activity’den tamamen ayrılır.



Activity’niz yarı transparan bir view tarafından arka plana itildiğinde, sistem onPause() metodunu çağırır ve activity paused(1) durumda bekler. Eğer kullanıcı activity’niz paused konumundayken geri gelirse, sistem onResume() (2) metodunu çağırır.

Activitynizi Duraklatmak


                Sistem onPause() metodunu çağırdığında bunun anlamı activity’ni kısmen görünür durumdadır. Ancak durum buna işaret etse de genel olarak kullanıcı activity’den ayrılmıştır ve yakında activity’niz Stopped duruma geçecek demektir. onPause() metodunu kullanmanız gereken durumlar;
·         CPU tüketebilecek, Animasyon veya diğer süregelen işlemleri duraklatmak için,
·         Kaydedilmeyen değişiklikleri sormak için ( tabii ki kullanıcının bu şekilde bir uyarı almasını gerektiren bir uygulama geliştiriyorsanız. Örneğin bir e-mail uygulaması…)
·         Broadcast Receivers(Yayın algılayıcılar), sensor işlemleri veya stopped durumda cihazın pil ömrünü azaltacak diğer kaynakların kullanıldığı uygulamalarda..
Örneğin, uygulamanız Kamera kullanıyorsa onPause() metodu kamerayı serbest bırakmak için ideal bir yerdir.

ÖRNEK:
@Override
public void onPause() {
    super.onPause();  // Always call the superclass method first

    // Release the Camera because we don't need it when paused
    // and other activities might need to use it.
    if (mCamera != null) {
        mCamera.release()
        mCamera = null;
    }
}

Genellikle, kullanıcı değişikliklerini geçici depolama alanlarına kaydetmek için onPause() metodunu kullanmamalısınız.  Bu işlemler için bu metodu kullanmanız gereken tek durum e-mail vb uygulamalarda olduğu gibi otomatik-kaydetme özelliği sağlamak istediğinizi zamanlardır. Ancak, bu işlemi yaparken CPU’nun yoğun kullanıldığı bir onPause()metodu kodlamaktan kaçınmalısınız.(DB yazma işlemleri tanımlamak gibi...) Çünkü bu işlem sırasında sistem kaynakları, geçiş yapılan diğer activity için yeteri kadar alan sahip olmayacağından kullanıcı deneyimini olumsuz etkileyecek bir işlem tanımlamış olursunuz.(yüksek sistem kaynağı kullanımına yol açabilecek işlemleriniz için onStop() metodunu kullanmalısınız.
NOT:
Activity’niz paused durumundayken, Activity örneği bellekte bir yer tutar ve activity e devam edileceği bu örnek geri çağırılır. Bu durumda activity’nizin bileşenlerini yeniden hazırlamanıza gerek yoktur.

Activitynizi Devam Ettirmek


                Kullanıcı activity’nizi durdurulmuş durumdan devam ettireceği zaman, sistem onResume() metodunu çağırır.
                Dikkat etmeniz gereken husus, activity’niz ilk defa oluşturulurken ve her ön plana çıkarılma durumunda bu metot sistem tarafından çağırılır. Eğer onPause() metoduyla durdurduğunuz işlemler varsa veya activity her Resumed duruma geçerken hazırlamanız gerek bileşenler var ise onResume() metodunu uygulamalı ve bu hazırlık kodlarını burada tanımlamanız gerekir.(durdurulan animasyonu tekrar başlatmak veya kullanıcını en son kaldığı konumları tekrar yüklemek için…)
                Aşağıdaki örnekte daha önce bahsedilen onPause() metodunun devamı olacak şekilde tanımlanmış bir onResume() metodu yer almaktadır.

 ÖRNEK:
@Override

public void onResume() {

    super.onResume();  // Always call the superclass method first



    // Get the Camera instance as the activity achieves full user focus

    if (mCamera == null) {

        initializeCamera(); // Local method to handle camera init

    }

}


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

15 Ekim 2015 Perşembe

ANDROID VE JAVA'DA TEMEL KAVRAMLAR-2



        Android ile çalışırken karşılaşacağınız kavramlar;




Activity: Html hakkında bilginiz var ise benzetim yoluyla bu kavramı anlatalım şöyle ki, her bir *.html dosyası kendi başına bir sayfadır ve etkileşime geçtiğinde ilgili sayfalara yönlendirir. Aynı şekilde Actvity'lerde tek bir sayfayı temsil eder ve çalışmalarınızı gerçekleştirirken Actvity bazlı geliştirip etkileşimi sağlamanız gerekecektir.

Intent:  Intent'in kelime karşılığı niyet, amaç demektir. Android'in diğer Activity'ler veya herhangi bir bileşenine erişirken bu kavramı kullanmamız gerekiyor. İki çeşit Intent karşımıza çıkacaktır. Bunlardan birinci Explicit Intent(Açık Niyet), ikincisi ise Implicit Intent(Kapalı Niyet) Explicit intentin kullanım amacı uygulamanıza yerleştirdiğiniz fonksiyonun hangi uygulama ile devam ettirileceğine siz karar verebiliyorsanız bu intent Explicit Intent ile sağlanır. Örneğin, Maps uygulaması ile etkileşime geçerken varsayılan olarak Google Maps uygulamasını yazılımcı olarak doğrudan tanımlamanız bu intent türüne girer. Implicit Intent ise yine aynı uygulama için cihazda hangi map uygulamasının kullanılacağına kullanıcının karar vermesini isterseniz bu kullanımda Implicit Intent olur.



Service:  Bu bileşen ile doğrudan kullanıcı ile etkileşim halinde olmayan veye  arka planda çalışabilen bir uygulama geliştirebilirsiniz. Örnek verecek olur isek, bir müzik çalar geliştirdiniz ve kullanıcının uygulamanız ile müzik dinlerken aynı anda farklı bir uygulamaya geçtiğinde müzik çalarınız kapanmasın istiyorsanız bu uygulamayı service olarak geliştirmeniz size yardımcı olacak çözümdür.


Broadcast Receivers: Bu bileşen, uygulamanızın android ile haberleşmesinde kullanacağınız bir özelliktir. Bu özellik ile geliştirdiğiniz uygulamanız android'de gerçekleşen işlemleri dinleyip, aynı şekilde dinlemede olan diğer uygulamalar ile etkileşime geçebilir olacaktır.
Örneğin, telefonunuz kulaklığın takıldığını veya gelen bir sms'i Broadcast Receiver bileşeni ile algılar.

Content Providers: Uygulamanızı geliştirdiğiniz zaman, uygulamanıza ait bileşenler (veritabanı gibi) sadece uygulamanızın erişimine açıktır. Eğer bu bileşen kullanırsanız uygulamanıza ait veritabanı diğer uygulamalar ve işletim sistemi tarafından erişilebilir olacaktır. Android sağladığı bazı içerik sağlayıcılar, Contacts Provider, Settings Provider vb..

Application Context: Yukarıda saydığımız bileşenlerden bir kaçı veya tamamı bir araya gelerek uygulama ortamınız meydana getirir. Yukarıdaki tüm bileşenler bu içerikten türetilmiştir.

Bütün bu bileşenleri uygulamanıza eklerken uygulamanızın bu bileşenleri kullanabilmesi için tanıtılması gerekir. Bu işlemin yapıldığı dosya olan AndroidManifest.xml dosyasını bir sonraki yazımızda açıklayacağız Hoşçakalın...

Soru ve Görüşleriniz için FB: Android ve Java

ANDROID VE JAVA'DA TEMEL KAVRAMLAR-1



       Uzun bir aradan sonra tekrar sizlerle birlikteyiz. developer.android.com adresindeki kaynakların tercümesini hazırlarken aynı anda android ve java dünyasına ait temel kavramlar hakkında bilgilendirme yapmamız gerekiyor. Lafı çok fazla uzatmadan konumuza giriş yapalım..

       Java Hakkında 

       Java, Sun Microsystems mühendislerinden James Gosling tarafından geliştirilmeye başlanmış açık kodlu, nesneye yönelik, zeminden bağımsız, yüksek verimli, çok işlevli, yüksek seviye, adım adım işletilen (yorumlanan-interpreted) bir dildir.
Java, Sun Microsystems'den James Gosling tarafından geliştirilen bir programlama dilidir (Sun Microsystem'in şu anda Oracle Corporation ile bağlı ortaklığı bulunmaktadır) ve 1995 yılında Sun Microsystems'in çekirdek bileşeni olarak piyasaya sürülmüştür. Bu dil C ve C++'dan birçok sözdizim türetmesine rağmen bu türevler daha basit nesne modeli ve daha az düşük seviye olanaklar içerir. Java uygulamaları bilgisayar mimarisine bağlı olmadan herhangi bir Java Virtual Machine (JVM)'de çalışabilen tipik bytecode'dur (sınıf dosyası).
Java ilk çıktığında daha çok küçük cihazlarda kullanılmak için tasarlanmış ortak bir düzlem dili olarak düşünülmüştü. Ancak düzlem bağımsızlığı özelliği ve tekbiçim kütüphane desteği C ve C++'tan çok daha üstün ve güvenli bir yazılım geliştirme ve işletme ortamı sunduğundan, hemen her yerde kullanılmaya başlanmıştır. 

Bir Java yazılımı şu şekilde geliştirilir;
  • Yazılımcı ve bilgisayar mühendisleri Java kodunu yazar.
  • Bu kod bir Java derleyicisi ile derlenir. Sonuçta "bytecode" adı verilen bir tür sanal makine kodu ortaya çıkar. Düzlem bağımsızlığını sağlayan bytecode'dur. Çünkü bir kere bytecode oluştuktan sonra yazılım sanal makine içeren tüm işletim sistemlerinde çalışabilmektedir.
  • Bu bytecode Java Sanal Makinesi (İng., Java Virtual Machine) tarafından işletilir. Bu aşama, her bir bytecode komutunun teker teker yorumlanması ile icra edilebileceği gibi, anında derleme kullanılarak da gerçekleştirilebilir.

         Java Sözdizimi

// MerhabaDünya.java
 public class MerhabaDünya{
     public static void main(String[] args) {
         System.out.println("Merhaba Dünya!");
     }
 }

       Android Hakkında   

        AndroidGoogleOpen Handset Alliance ve özgür yazılım topluluğu tarafından geliştirilmiş olan, Linux tabanlı, mobil cihaz ve cep telefonları için geliştirilmekte olan, açık kaynak kodlu bir mobil ücretsiz bir işletim sistemidir. Sistem açık kaynak kodlu olsa da, ufak ama çok önemli kısmın google tarafından kodları kapalıdır, google bu kısmın kendisi dışında ulaşılmasını istememektedir. Desteklenen uygulama uzantısı ".apk"dir. Google tarafından ücretsiz olmasının sebebi, sistemin daha hızlı ve çabuk gelişmesi, birçok popüler marka tarafından kullanılması ve bu sayede reklamlarını daha fazla kişiye ulaşmasını sağlamaktır. Google bir reklam firmasıdır, reklam alarak para kazanır, android sistemi üzerinde çalışan Google Play marketteki oyun ve uygulamalar üzerinde aldığı reklamları yayınlamaktadır, bu şekilde daha fazlasını kazanmaktadır.
       Android, aygıtların fonksiyonelliğini genişleten uygulamalar yazan geniş bir geliştirici grubuna sahiptir. Android için halihazırda 1 milyondan fazla uygulama bulunmaktadır. Google Play Store ise, Android işletim sistemi uygulamalarının çeşitli sitelerden indirilebilmesinin yanı sıra, Google tarafından işletilen kurumsal uygulama mağazasıdır. Geliştiriciler, ilk olarak aygıtı, Google'ın Java kütüphanesi aracılığıyla kontrol ederek Java dilinde yazmışlardır.
       Android, Linux çekirdeği üzerine inşa edilmiş bir mobil işletim sistemidir. Bu sistem ara katman yazılımı, kütüphaneler ve API C diliyle yazılmıştır. Uygulama yazılımları ise, Apache harmony üzerine kurulu Java-uyumlu kütüphaneleri içine alan uygulama iskeleti üzerinden çalışmaktadır. Android, derlenmiş Java kodunu çalıştırmak için dinamik çevirmeli (JIT) Dalvik sanal makinesini kullanır ve cihazların fonksiyonelliğini artıran uygulamaların geliştirilmesi için çalışan geniş bir programcı-geliştirici çevresine sahiptir. Google aynı zamanda işletim sistemindeki hataları bulan kullanıcıları para ödülü ile ödüllendirmektedir.

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

28 Nisan 2015 Salı

Learn English For Kids - Çocukların İngilizce Öğreniminde Büyük Kolaylık

Herkese Merhabalar!



İlk android projem olan Learn English For Kids uygulamasını sizlere tanıtmaktan memnuniyet duyarız. Bu uygulamamız ile çocuklarımız okul öncesi dönemde, çevresinde karşılaşabileceği bazı hayvanlar, meyveler, sayılar ve renklere ait temel terimleri öğrenebileceği, öğrenirken de eğlenceli vakit geçireceği faydalı bir araçtır. 

Uygulamamız içeriği 1 adet öğrenme etkinliği ve 3 adet mini oyundan oluşmaktadır. Bu oyunlar;

·         Learning: Bu etkinlik ile çocuklarımız hayvanlar, sayılar, renkler ve meyvelerden oluşan kategorilerden bir tanesini seçerek, öğrenme sürecini başlatır. Bu kısımda görsel olarak ekrana gelen 4 çeşit seçenek içinden istenilene tıklanarak sesli olarak okunuşu, yazılı olarak da doğru şekilde yazılışının öğrenilmesi amaçlanmaktadır.

·         Exercise:  Bu etkinlik, çocuğumuzun “Learning “ kısmında edindiği öğrenimleri pekiştirmesi amacıyla tasarlanmıştır. Bu etkinlik sırasında ekrana gelen 4 üründen bir tanesine ait soru, ürünler altında ekrana getirilir. Bu şekilde ekrana getirilen soru ile çocuğumuzun doğru cevabı seçmesin isteriz ve böylece çocuğumuzun öğrendiği ürünlere ait doğru yazılışları öğrenme sürecini temin etmiş oluruz.

·         Listen&Guess:  Bu öğrenme etkinliği ile uygulama tarafından ekrana getirilen 4 adet üründen, bir tanesine ait olan okunuş bilgisi rastgele sorulur. Bu sorunun ardından çocuğumuzun doğru cevabı vermesi beklenir.  Bu etkinlik sayesinde öğrenme sürecine katılan temel terimlerin doğru okunuş ve telaffuzlarına ait öğrenme etkinliği gerçekleştirilmiş olur.


·         Speaking: Bu öğrenme etkinliğinde ise, çocuklarımızın “Learning” etkinliği ile öğrenmiş olduğu ürünlere ait doğru telaffuz edebilme becerisini kazandırmayı amaçlıyoruz.


Önemli Uyarı:
Uygulamamız tamamen çocukların kullanımına yönelik geliştirilmiş olup biz ebeveynlerin kontrolünde ve limitli zaman aralıklarında kullanılması tavsiye edilir. Aşırı elektronik cihaz kullanımı (PC, tablet, cep telefonu vb. )  çocuklarımızın sosyal gelişimine olumsuz etki eder.


Uygulamamız Google Inc.'nin hazırlamış olduğu uygunluk derecelendirme anketi ile derecelendirilmiştir.

16 Nisan 2015 Perşembe

Örnek Uygulama-Back Buton Handling

Back Button Handling-Geri tuşuna basma olaylarını ele alma


     İlk uygulamamızı tamamlamak için bir süre bloğumuzu ihmal ettik... Bildiğiniz gibi bu yola çıkarken sizler gibi Android'e aç bir şekilde yola çıktım ve nihayet ilk uygulamamız play store'de yerini aldı. Bu çalışma süresince öğrendiğim bilgileri sizlere zaman zaman aktaracağım. Bu bilgilerden bir tanesi de Back Button eylemleri hakkında olacak...


    Kimi cihazlarda software, kimi cihazlarda hardware olarak bulunan back buton ile yapmak istediğiniz herhangi bir işlem var ise (genelde çıkış veya bir önceki menü'ye geçiş olabilmektedir) bu işlemleri gerçekleştirmek çok basit...



     Bu eylemi yönetmek için yapmanız gereken tek şey;



 @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
                     //Burada alert.dialoga OLUMLU bir cevabınız olduğunda gerekli kodları yazın

        if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {

            try {
                AlertDialog.Builder alert = new AlertDialog.Builder(this);
                alert.setTitle("Are You Sure Want to Exit?");
                alert.setCancelable(false);
                alert.setPositiveButton("Yes",new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                        android.os.Process.killProcess(android.os.Process.myPid());
                    }
                });

                alert.setNegativeButton("No",new DialogInterface.OnClickListener() {

                     //Burada alert.dialoga OLUMSUZ bir cevabınız olduğunda gerekli kodları yazın
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(getApplicationContext(),
                                "Write Something else", Toast.LENGTH_SHORT).show();

                    }
                });
                alert.setNeutralButton("Rate US!",new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                        // Tercihen eklemek istediğiniz bir konu var ise burayı kullanın.
                    }
                });
                alert.create().show();
                return super.onKeyDown(keyCode,event);
            }
            catch (IllegalStateException e) {
                e.printStackTrace();
            }

            return true;


        }

        return true;
    }



     yukarıdaki kod bloğu ile back buton basıldığında "Are You Sure Want To Exit?" başlıklı bir alert dialog ekrana çıkıyor. Bu diyalog içerisinde 3 adet buton yer alabilmektedir. Bunlar "positive","negative" ve "neutral" şeklindedir. Bu seçenekler altına yapılmasını istediğiniz işlemleri ekleyerek back butona kontrolü sağlamış olursunuz.

     Fırsat buldukça pratik örnek uygulamalar yayınlamaya devam edeceğim.

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

Herkese iyi günler 

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

Android-ActivityLifeCycleYönetimi-BirActivityDurdurmakVeYenidenBaşlatmak

Bir Activity Durdurmak ve Yeniden Başlatmak


                Düzenli bir durdurma ve yeniden başlatma işlemi kullanıcın activity’nize geri döndüğünde sürekli aktif ve kullanıcı bilgilerinin korunması için önemli bir işlem sürecidir. Activity’nizin durdurulup yeniden başlatılmaya ihtiyaç duyacağı birkaç senaryodan bazıları aşağıdaki gibi olabilir.
·         Kullanıcı Recent Apps( son kullanılan Uygulamalar) menüsünü açıp farklı uygulamalara geçiş yapabilir. Bu durumda uygulamanızın ekranda bulunan activity örneği durdurulur. Kullanıcı ana ekranda yer alan bulunan uygulama ikonunuza dokunduğunda veya Recent Apps penceresinden geri geldiğinde activity yeniden başlatılır.
·         Kullanıcı uygulamanız içinden yeni bir activity başlatacak bir işlem gerçekleştirdiğinde mevcut activity durdurulur ve diğer activity başlatılır. Kullanıcı back butonun bastığında ilk activity tekrar başlatılır.
·         Kullanıcı uygulamanızı kullandığı anda bir çağrı alınca…

Activity sınıfı, uygulamanızın durdurulması ve yeniden başlatılması gibi durumlarda uygulamanızın nasıl davranacağına karar vermek için onStop() ve onRestart() gibi iki yaşam döngüsü metodu tanımlar. Paused durumdan farklı olarak, (kısmen UI arka plana itildiği durum olarak tanımlanan) stopped durum UI nin tamamen arka plana atılmasını ve hiçbir şekilde görünmemesini garanti ederek activity den kullanıcının dikkatini tamamen keser.

NOT:
Sistem Activityniz stopped duruma geçtiğinde bu activitynin bir örneğini bellekte sakladığı için, onStop() veya onRestart() metodunu uygulamanıza gerek kalmaz. Hatta onStart() metodunu bile uygulamanız gerekmeyebilir. Birçok activity nispeten basittirler ve çok rahat bir şekilde durdurulup başlatılabilirler ve size sadece süregelen işlemleri durdurmak için onPause() metodunu kullanmak kalır.



     Kullanıcı activity’nizden ayrıldığında, sistem onStop() metodunu çağırarak activity i durdurur(1). Activity durdurulduğunda kullanıcı geri gelirse, sistem onRestart()(2) metodunu çağırır ve bunu hızlıca onStart()(3) ve onResume()(4) metodu takip eder. Dikkat etmeniz gereken asıl konu ise ne türlü bir senaryo gerçekleşecek olursa olsun, sistem onStop() metodundan evvel onPause() metodunu çağırır.

Activity Durdurmak


                Activity’niz onStop() metodunu çağırdığında, bu demek oluyor ki artık bu activity daha fazla görünmeyecek ve kullanıcının ihtiyaç duymadığı ne kadar kaynak var ise serbest bırakılacak demektir. Activity’niz durdurulduğunda, sistem kaynağına ihtiyaç var ise bu activity örneği yok edilecektir. Diğer bellek gerektiren ekstra durumlarda, sistem uygulamanızı onDestroy() metodunu çağırmaya ihtiyaç duymadan sonlandırabilir. Bu nedenle onStop() metodunu kullanmanızdaki en büyük fayda sistemin bu yola başvurmadan evvel sizin sistem kaynaklarını serbest bırakmanızdır.
                onPause() metodu onStop() metodundan evvel çağırılmasına rağmen, aşırı sistem kaynağını tüketen işlemleri sonlandırmak için onStop() metodunu kullanmanız her zaman daha verimli bir işlem olacaktır.

                Aşağıdaki örnekte, onStop() metodunun bir uygulaması görülmektedir. Bu uygulama ile geçici belleği not defterinde tutulan kayıtların kaydedilme işlemi icra ediliyor.

ÖRNEK:
@Override
protected void onStop() {
    super.onStop();  // Always call the superclass method first

    // Save the note's current draft, because the activity is stopping
    // and we want to be sure the current note progress isn't lost.
    ContentValues values = new ContentValues();
    values.put(NotePad.Notes.COLUMN_NAME_NOTE, getCurrentNoteText());
    values.put(NotePad.Notes.COLUMN_NAME_TITLE, getCurrentNoteTitle());

    getContentResolver().update(
            mUri,    // The URI for the note to update.
            values,  // The map of column names and new values to apply to them.
            null,    // No SELECT criteria are used.
            null     // No WHERE columns are used.
            );
}

                Activity’niz durdurulduğunda, Activity nesnesi bellekte bir yer tutar ve yeniden çağırıldığında activity devam eder. Bu süreç içerisinde uygulamanızın bileşenlerini yeniden hazırlamanız gerekmemektedir. Sistem ayrıca mevcut duruma ait her bir View’in izini de saklar. Böylece kullanıcı EditText öğesine bir veri girişi yaptığında bu otomatik olarak, sizin herhangi bir saklama prosedürü uygulamanıza gerek kalmadan saklanır.

NOT:
Stopped durumda sistem activity’nizin yok etse bile, bu activitye ait View nesnelerinin durumlarını Bundle içerisinde korur ve kullanıcı aynı activity örneğine geri döndüğünde UI nin son haliyle uygulama çalışmaya devam eder. ( Bir sonraki konuda Bundle hakkında daha detaylı bilgi aktaracağız)

Bir Activity’nin Başlatılması/Yeniden Başlatılması


                Activityniz Stopped durumdan tekrar ön plana geldiğinde, onRestart() metoduna geçer. Ayrıca sistem, activityniz her ön plana geldiğinde olduğu gibi onStart() metodunu da çağırır. onRestart() metodu sadece activity stopped durumdan devam ederken çağırılır. Böylece öncelikle stopped duruma geçen uygulamanız için bazı özel restorasyonları gerçekleştirme imkânı elde etmiş olursunuz.
                Uygulamanın activity durumunu onRestart() metodu ile restore etmesi aslında çok yaygın bir kullanım değildir. Çünkü genel uygulama dünyasında bu tarz bir yönetime pek ihtiyaç duyulmamaktadır. onStop() metodu activitynizin kullandığı tüm kaynakları temizlemek için uygulanmalıdır. Ancak bu işlem sonrası Activity yeniden çağırıldığında durdurduğunuz tüm işlemleri yeniden hazırlamanız gerekecektir. Bunun yanında Activity’niz yeniden oluşturulduğu durumlarda da bu hazırlıkları yapmanız gerekcektir.( hiçbir şekilde activity örneğinizin olmadığı durum). Bu nedenle, onStop() metoduna karşılık olarak her zaman onStart() metodunu kullanmalısınız. Böylece hem onRestart() metodunu hem de onStart() metodunu kullanmak durumunda kalmamış olursunuz. Çünkü sistem yukarıda bahsettiğimiz gibi activitye dönüldüğü anda, onStart() metdounu her iki durumda da çağıracaktır.

Kullanıcı uygulamanızdan uzun süreliğine ayrıldığında, uygulamanıza geri dönmeden evvel onStart() metodu gerekli sistem ihtiyaçlarını ve özelliklerini doğrulamak için doğru metot olacaktır.

ÖRNEK:
@Override
protected void onStart() {
   
super.onStart();  // Always call the superclass method first
   
   
// The activity is either being restarted or started for the first time
   
// so this is where we should make sure that GPS is enabled
   
LocationManager locationManager =
           
(LocationManager) getSystemService(Context.LOCATION_SERVICE);
   
boolean gpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
   
   
if (!gpsEnabled) {
       
// Create a dialog here that requests the user to enable GPS, and use an intent
       
// with the android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS action
       
// to take the user to the Settings screen to enable GPS when they click "OK"
   
}
}

@Override
protected void onRestart() {
   
super.onRestart();  // Always call the superclass method first
   
   
// Activity being restarted from stopped state    
}

Sistem activitynizi yok ettiğinde, Activity için onDestroy() metodunu çağırır. onDestroy() metodunun çağırılmasına ihtiyaç kalmıyor, çünkü genellikle uygulamanızın kullanmış olduğu birçok sistem kaynaklarının onStop() metodunda durdurulması gerekmektedir. Fakat bu metot sistem kaynaklarının gereksiz kullanımını durdurmak için son şansınız demektir. Bu metot ile en son durdurmak isteyeceğiniz işlemleri tanımlamanız cihaz sistem kaynakları için çok önemlidir. Bunun üzerinde durmamızın sebebi uygulamanızın çalışma performansını ve kullanıcı deneyimin yüksek düzeyde tutmayı amaçlamamızdır.


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

Android-ActivityLifeCycleYönetimi-BirActivityDuraklatmakVeDevamEttirmek

Bir Activity Duraklatmak ve Devam Ettirmek


                Normal uygulama kullanımı sırasında, ekranda aktif olan activity diğer görsel bileşenler tarafından arka plana itilir ve activty’i pause konumuna geçirir. Örneğin, yarı-transparan bir activity (dialog kutuları gibi) açıldığında, bir önceki activity pause edilir. Diğer activity ekranda kaldığı sürece asıl ekran dikkat dışıdır ve paused (duraklatılmış) konumda bekler.
                Activity tamamen görünmez olur ve arka plana geçirilirse, Stopped(durdurulmuş) konuma geçer. (Bir sonraki konu bununla alakalı olacak)
                Activity’niz paused duruma geçtiğinde, sistem uygulamanızın sürdürdüğü işlemleri durdurmak için veya kullanıcının son işlemlerini kaydetmek için kullanabileceğiniz activity’niz içinde kodlanmış olan onPause() metodunu çağırır. Eğer kullanıcı paused durumdan activity’e geri dönüş yaparsa sistem uygulamanıza devam etmek için onResume() metodunu çağırır.

NOT:
Activity’niz onPause() metodunu çağırdığı anda, bu kullanıcını bir süre sonra uygulamanıza veya activity’nize geri döneceği anlamına gelir. Ancak genelde böyle olmaz ve kullanıcı activity’den tamamen ayrılır.



Activity’niz yarı transparan bir view tarafından arka plana itildiğinde, sistem onPause() metodunu çağırır ve activity paused(1) durumda bekler. Eğer kullanıcı activity’niz paused konumundayken geri gelirse, sistem onResume() (2) metodunu çağırır.

Activitynizi Duraklatmak


                Sistem onPause() metodunu çağırdığında bunun anlamı activity’ni kısmen görünür durumdadır. Ancak durum buna işaret etse de genel olarak kullanıcı activity’den ayrılmıştır ve yakında activity’niz Stopped duruma geçecek demektir. onPause() metodunu kullanmanız gereken durumlar;
·         CPU tüketebilecek, Animasyon veya diğer süregelen işlemleri duraklatmak için,
·         Kaydedilmeyen değişiklikleri sormak için ( tabii ki kullanıcının bu şekilde bir uyarı almasını gerektiren bir uygulama geliştiriyorsanız. Örneğin bir e-mail uygulaması…)
·         Broadcast Receivers(Yayın algılayıcılar), sensor işlemleri veya stopped durumda cihazın pil ömrünü azaltacak diğer kaynakların kullanıldığı uygulamalarda..
Örneğin, uygulamanız Kamera kullanıyorsa onPause() metodu kamerayı serbest bırakmak için ideal bir yerdir.

ÖRNEK:
@Override
public void onPause() {
    super.onPause();  // Always call the superclass method first

    // Release the Camera because we don't need it when paused
    // and other activities might need to use it.
    if (mCamera != null) {
        mCamera.release()
        mCamera = null;
    }
}

Genellikle, kullanıcı değişikliklerini geçici depolama alanlarına kaydetmek için onPause() metodunu kullanmamalısınız.  Bu işlemler için bu metodu kullanmanız gereken tek durum e-mail vb uygulamalarda olduğu gibi otomatik-kaydetme özelliği sağlamak istediğinizi zamanlardır. Ancak, bu işlemi yaparken CPU’nun yoğun kullanıldığı bir onPause()metodu kodlamaktan kaçınmalısınız.(DB yazma işlemleri tanımlamak gibi...) Çünkü bu işlem sırasında sistem kaynakları, geçiş yapılan diğer activity için yeteri kadar alan sahip olmayacağından kullanıcı deneyimini olumsuz etkileyecek bir işlem tanımlamış olursunuz.(yüksek sistem kaynağı kullanımına yol açabilecek işlemleriniz için onStop() metodunu kullanmalısınız.
NOT:
Activity’niz paused durumundayken, Activity örneği bellekte bir yer tutar ve activity e devam edileceği bu örnek geri çağırılır. Bu durumda activity’nizin bileşenlerini yeniden hazırlamanıza gerek yoktur.

Activitynizi Devam Ettirmek


                Kullanıcı activity’nizi durdurulmuş durumdan devam ettireceği zaman, sistem onResume() metodunu çağırır.
                Dikkat etmeniz gereken husus, activity’niz ilk defa oluşturulurken ve her ön plana çıkarılma durumunda bu metot sistem tarafından çağırılır. Eğer onPause() metoduyla durdurduğunuz işlemler varsa veya activity her Resumed duruma geçerken hazırlamanız gerek bileşenler var ise onResume() metodunu uygulamalı ve bu hazırlık kodlarını burada tanımlamanız gerekir.(durdurulan animasyonu tekrar başlatmak veya kullanıcını en son kaldığı konumları tekrar yüklemek için…)
                Aşağıdaki örnekte daha önce bahsedilen onPause() metodunun devamı olacak şekilde tanımlanmış bir onResume() metodu yer almaktadır.

 ÖRNEK:
@Override

public void onResume() {

    super.onResume();  // Always call the superclass method first



    // Get the Camera instance as the activity achieves full user focus

    if (mCamera == null) {

        initializeCamera(); // Local method to handle camera init

    }

}


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

15 Ekim 2015 Perşembe

ANDROID VE JAVA'DA TEMEL KAVRAMLAR-2



        Android ile çalışırken karşılaşacağınız kavramlar;




Activity: Html hakkında bilginiz var ise benzetim yoluyla bu kavramı anlatalım şöyle ki, her bir *.html dosyası kendi başına bir sayfadır ve etkileşime geçtiğinde ilgili sayfalara yönlendirir. Aynı şekilde Actvity'lerde tek bir sayfayı temsil eder ve çalışmalarınızı gerçekleştirirken Actvity bazlı geliştirip etkileşimi sağlamanız gerekecektir.

Intent:  Intent'in kelime karşılığı niyet, amaç demektir. Android'in diğer Activity'ler veya herhangi bir bileşenine erişirken bu kavramı kullanmamız gerekiyor. İki çeşit Intent karşımıza çıkacaktır. Bunlardan birinci Explicit Intent(Açık Niyet), ikincisi ise Implicit Intent(Kapalı Niyet) Explicit intentin kullanım amacı uygulamanıza yerleştirdiğiniz fonksiyonun hangi uygulama ile devam ettirileceğine siz karar verebiliyorsanız bu intent Explicit Intent ile sağlanır. Örneğin, Maps uygulaması ile etkileşime geçerken varsayılan olarak Google Maps uygulamasını yazılımcı olarak doğrudan tanımlamanız bu intent türüne girer. Implicit Intent ise yine aynı uygulama için cihazda hangi map uygulamasının kullanılacağına kullanıcının karar vermesini isterseniz bu kullanımda Implicit Intent olur.



Service:  Bu bileşen ile doğrudan kullanıcı ile etkileşim halinde olmayan veye  arka planda çalışabilen bir uygulama geliştirebilirsiniz. Örnek verecek olur isek, bir müzik çalar geliştirdiniz ve kullanıcının uygulamanız ile müzik dinlerken aynı anda farklı bir uygulamaya geçtiğinde müzik çalarınız kapanmasın istiyorsanız bu uygulamayı service olarak geliştirmeniz size yardımcı olacak çözümdür.


Broadcast Receivers: Bu bileşen, uygulamanızın android ile haberleşmesinde kullanacağınız bir özelliktir. Bu özellik ile geliştirdiğiniz uygulamanız android'de gerçekleşen işlemleri dinleyip, aynı şekilde dinlemede olan diğer uygulamalar ile etkileşime geçebilir olacaktır.
Örneğin, telefonunuz kulaklığın takıldığını veya gelen bir sms'i Broadcast Receiver bileşeni ile algılar.

Content Providers: Uygulamanızı geliştirdiğiniz zaman, uygulamanıza ait bileşenler (veritabanı gibi) sadece uygulamanızın erişimine açıktır. Eğer bu bileşen kullanırsanız uygulamanıza ait veritabanı diğer uygulamalar ve işletim sistemi tarafından erişilebilir olacaktır. Android sağladığı bazı içerik sağlayıcılar, Contacts Provider, Settings Provider vb..

Application Context: Yukarıda saydığımız bileşenlerden bir kaçı veya tamamı bir araya gelerek uygulama ortamınız meydana getirir. Yukarıdaki tüm bileşenler bu içerikten türetilmiştir.

Bütün bu bileşenleri uygulamanıza eklerken uygulamanızın bu bileşenleri kullanabilmesi için tanıtılması gerekir. Bu işlemin yapıldığı dosya olan AndroidManifest.xml dosyasını bir sonraki yazımızda açıklayacağız Hoşçakalın...

Soru ve Görüşleriniz için FB: Android ve Java

ANDROID VE JAVA'DA TEMEL KAVRAMLAR-1



       Uzun bir aradan sonra tekrar sizlerle birlikteyiz. developer.android.com adresindeki kaynakların tercümesini hazırlarken aynı anda android ve java dünyasına ait temel kavramlar hakkında bilgilendirme yapmamız gerekiyor. Lafı çok fazla uzatmadan konumuza giriş yapalım..

       Java Hakkında 

       Java, Sun Microsystems mühendislerinden James Gosling tarafından geliştirilmeye başlanmış açık kodlu, nesneye yönelik, zeminden bağımsız, yüksek verimli, çok işlevli, yüksek seviye, adım adım işletilen (yorumlanan-interpreted) bir dildir.
Java, Sun Microsystems'den James Gosling tarafından geliştirilen bir programlama dilidir (Sun Microsystem'in şu anda Oracle Corporation ile bağlı ortaklığı bulunmaktadır) ve 1995 yılında Sun Microsystems'in çekirdek bileşeni olarak piyasaya sürülmüştür. Bu dil C ve C++'dan birçok sözdizim türetmesine rağmen bu türevler daha basit nesne modeli ve daha az düşük seviye olanaklar içerir. Java uygulamaları bilgisayar mimarisine bağlı olmadan herhangi bir Java Virtual Machine (JVM)'de çalışabilen tipik bytecode'dur (sınıf dosyası).
Java ilk çıktığında daha çok küçük cihazlarda kullanılmak için tasarlanmış ortak bir düzlem dili olarak düşünülmüştü. Ancak düzlem bağımsızlığı özelliği ve tekbiçim kütüphane desteği C ve C++'tan çok daha üstün ve güvenli bir yazılım geliştirme ve işletme ortamı sunduğundan, hemen her yerde kullanılmaya başlanmıştır. 

Bir Java yazılımı şu şekilde geliştirilir;
  • Yazılımcı ve bilgisayar mühendisleri Java kodunu yazar.
  • Bu kod bir Java derleyicisi ile derlenir. Sonuçta "bytecode" adı verilen bir tür sanal makine kodu ortaya çıkar. Düzlem bağımsızlığını sağlayan bytecode'dur. Çünkü bir kere bytecode oluştuktan sonra yazılım sanal makine içeren tüm işletim sistemlerinde çalışabilmektedir.
  • Bu bytecode Java Sanal Makinesi (İng., Java Virtual Machine) tarafından işletilir. Bu aşama, her bir bytecode komutunun teker teker yorumlanması ile icra edilebileceği gibi, anında derleme kullanılarak da gerçekleştirilebilir.

         Java Sözdizimi

// MerhabaDünya.java
 public class MerhabaDünya{
     public static void main(String[] args) {
         System.out.println("Merhaba Dünya!");
     }
 }

       Android Hakkında   

        AndroidGoogleOpen Handset Alliance ve özgür yazılım topluluğu tarafından geliştirilmiş olan, Linux tabanlı, mobil cihaz ve cep telefonları için geliştirilmekte olan, açık kaynak kodlu bir mobil ücretsiz bir işletim sistemidir. Sistem açık kaynak kodlu olsa da, ufak ama çok önemli kısmın google tarafından kodları kapalıdır, google bu kısmın kendisi dışında ulaşılmasını istememektedir. Desteklenen uygulama uzantısı ".apk"dir. Google tarafından ücretsiz olmasının sebebi, sistemin daha hızlı ve çabuk gelişmesi, birçok popüler marka tarafından kullanılması ve bu sayede reklamlarını daha fazla kişiye ulaşmasını sağlamaktır. Google bir reklam firmasıdır, reklam alarak para kazanır, android sistemi üzerinde çalışan Google Play marketteki oyun ve uygulamalar üzerinde aldığı reklamları yayınlamaktadır, bu şekilde daha fazlasını kazanmaktadır.
       Android, aygıtların fonksiyonelliğini genişleten uygulamalar yazan geniş bir geliştirici grubuna sahiptir. Android için halihazırda 1 milyondan fazla uygulama bulunmaktadır. Google Play Store ise, Android işletim sistemi uygulamalarının çeşitli sitelerden indirilebilmesinin yanı sıra, Google tarafından işletilen kurumsal uygulama mağazasıdır. Geliştiriciler, ilk olarak aygıtı, Google'ın Java kütüphanesi aracılığıyla kontrol ederek Java dilinde yazmışlardır.
       Android, Linux çekirdeği üzerine inşa edilmiş bir mobil işletim sistemidir. Bu sistem ara katman yazılımı, kütüphaneler ve API C diliyle yazılmıştır. Uygulama yazılımları ise, Apache harmony üzerine kurulu Java-uyumlu kütüphaneleri içine alan uygulama iskeleti üzerinden çalışmaktadır. Android, derlenmiş Java kodunu çalıştırmak için dinamik çevirmeli (JIT) Dalvik sanal makinesini kullanır ve cihazların fonksiyonelliğini artıran uygulamaların geliştirilmesi için çalışan geniş bir programcı-geliştirici çevresine sahiptir. Google aynı zamanda işletim sistemindeki hataları bulan kullanıcıları para ödülü ile ödüllendirmektedir.

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

28 Nisan 2015 Salı

Learn English For Kids - Çocukların İngilizce Öğreniminde Büyük Kolaylık

Herkese Merhabalar!



İlk android projem olan Learn English For Kids uygulamasını sizlere tanıtmaktan memnuniyet duyarız. Bu uygulamamız ile çocuklarımız okul öncesi dönemde, çevresinde karşılaşabileceği bazı hayvanlar, meyveler, sayılar ve renklere ait temel terimleri öğrenebileceği, öğrenirken de eğlenceli vakit geçireceği faydalı bir araçtır. 

Uygulamamız içeriği 1 adet öğrenme etkinliği ve 3 adet mini oyundan oluşmaktadır. Bu oyunlar;

·         Learning: Bu etkinlik ile çocuklarımız hayvanlar, sayılar, renkler ve meyvelerden oluşan kategorilerden bir tanesini seçerek, öğrenme sürecini başlatır. Bu kısımda görsel olarak ekrana gelen 4 çeşit seçenek içinden istenilene tıklanarak sesli olarak okunuşu, yazılı olarak da doğru şekilde yazılışının öğrenilmesi amaçlanmaktadır.

·         Exercise:  Bu etkinlik, çocuğumuzun “Learning “ kısmında edindiği öğrenimleri pekiştirmesi amacıyla tasarlanmıştır. Bu etkinlik sırasında ekrana gelen 4 üründen bir tanesine ait soru, ürünler altında ekrana getirilir. Bu şekilde ekrana getirilen soru ile çocuğumuzun doğru cevabı seçmesin isteriz ve böylece çocuğumuzun öğrendiği ürünlere ait doğru yazılışları öğrenme sürecini temin etmiş oluruz.

·         Listen&Guess:  Bu öğrenme etkinliği ile uygulama tarafından ekrana getirilen 4 adet üründen, bir tanesine ait olan okunuş bilgisi rastgele sorulur. Bu sorunun ardından çocuğumuzun doğru cevabı vermesi beklenir.  Bu etkinlik sayesinde öğrenme sürecine katılan temel terimlerin doğru okunuş ve telaffuzlarına ait öğrenme etkinliği gerçekleştirilmiş olur.


·         Speaking: Bu öğrenme etkinliğinde ise, çocuklarımızın “Learning” etkinliği ile öğrenmiş olduğu ürünlere ait doğru telaffuz edebilme becerisini kazandırmayı amaçlıyoruz.


Önemli Uyarı:
Uygulamamız tamamen çocukların kullanımına yönelik geliştirilmiş olup biz ebeveynlerin kontrolünde ve limitli zaman aralıklarında kullanılması tavsiye edilir. Aşırı elektronik cihaz kullanımı (PC, tablet, cep telefonu vb. )  çocuklarımızın sosyal gelişimine olumsuz etki eder.


Uygulamamız Google Inc.'nin hazırlamış olduğu uygunluk derecelendirme anketi ile derecelendirilmiştir.

16 Nisan 2015 Perşembe

Örnek Uygulama-Back Buton Handling

Back Button Handling-Geri tuşuna basma olaylarını ele alma


     İlk uygulamamızı tamamlamak için bir süre bloğumuzu ihmal ettik... Bildiğiniz gibi bu yola çıkarken sizler gibi Android'e aç bir şekilde yola çıktım ve nihayet ilk uygulamamız play store'de yerini aldı. Bu çalışma süresince öğrendiğim bilgileri sizlere zaman zaman aktaracağım. Bu bilgilerden bir tanesi de Back Button eylemleri hakkında olacak...


    Kimi cihazlarda software, kimi cihazlarda hardware olarak bulunan back buton ile yapmak istediğiniz herhangi bir işlem var ise (genelde çıkış veya bir önceki menü'ye geçiş olabilmektedir) bu işlemleri gerçekleştirmek çok basit...



     Bu eylemi yönetmek için yapmanız gereken tek şey;



 @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
                     //Burada alert.dialoga OLUMLU bir cevabınız olduğunda gerekli kodları yazın

        if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {

            try {
                AlertDialog.Builder alert = new AlertDialog.Builder(this);
                alert.setTitle("Are You Sure Want to Exit?");
                alert.setCancelable(false);
                alert.setPositiveButton("Yes",new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                        android.os.Process.killProcess(android.os.Process.myPid());
                    }
                });

                alert.setNegativeButton("No",new DialogInterface.OnClickListener() {

                     //Burada alert.dialoga OLUMSUZ bir cevabınız olduğunda gerekli kodları yazın
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(getApplicationContext(),
                                "Write Something else", Toast.LENGTH_SHORT).show();

                    }
                });
                alert.setNeutralButton("Rate US!",new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                        // Tercihen eklemek istediğiniz bir konu var ise burayı kullanın.
                    }
                });
                alert.create().show();
                return super.onKeyDown(keyCode,event);
            }
            catch (IllegalStateException e) {
                e.printStackTrace();
            }

            return true;


        }

        return true;
    }



     yukarıdaki kod bloğu ile back buton basıldığında "Are You Sure Want To Exit?" başlıklı bir alert dialog ekrana çıkıyor. Bu diyalog içerisinde 3 adet buton yer alabilmektedir. Bunlar "positive","negative" ve "neutral" şeklindedir. Bu seçenekler altına yapılmasını istediğiniz işlemleri ekleyerek back butona kontrolü sağlamış olursunuz.

     Fırsat buldukça pratik örnek uygulamalar yayınlamaya devam edeceğim.

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

Herkese iyi günler 

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

Android-ActivityLifeCycleYönetimi-BirActivityDurdurmakVeYenidenBaşlatmak

Bir Activity Durdurmak ve Yeniden Başlatmak


                Düzenli bir durdurma ve yeniden başlatma işlemi kullanıcın activity’nize geri döndüğünde sürekli aktif ve kullanıcı bilgilerinin korunması için önemli bir işlem sürecidir. Activity’nizin durdurulup yeniden başlatılmaya ihtiyaç duyacağı birkaç senaryodan bazıları aşağıdaki gibi olabilir.
·         Kullanıcı Recent Apps( son kullanılan Uygulamalar) menüsünü açıp farklı uygulamalara geçiş yapabilir. Bu durumda uygulamanızın ekranda bulunan activity örneği durdurulur. Kullanıcı ana ekranda yer alan bulunan uygulama ikonunuza dokunduğunda veya Recent Apps penceresinden geri geldiğinde activity yeniden başlatılır.
·         Kullanıcı uygulamanız içinden yeni bir activity başlatacak bir işlem gerçekleştirdiğinde mevcut activity durdurulur ve diğer activity başlatılır. Kullanıcı back butonun bastığında ilk activity tekrar başlatılır.
·         Kullanıcı uygulamanızı kullandığı anda bir çağrı alınca…

Activity sınıfı, uygulamanızın durdurulması ve yeniden başlatılması gibi durumlarda uygulamanızın nasıl davranacağına karar vermek için onStop() ve onRestart() gibi iki yaşam döngüsü metodu tanımlar. Paused durumdan farklı olarak, (kısmen UI arka plana itildiği durum olarak tanımlanan) stopped durum UI nin tamamen arka plana atılmasını ve hiçbir şekilde görünmemesini garanti ederek activity den kullanıcının dikkatini tamamen keser.

NOT:
Sistem Activityniz stopped duruma geçtiğinde bu activitynin bir örneğini bellekte sakladığı için, onStop() veya onRestart() metodunu uygulamanıza gerek kalmaz. Hatta onStart() metodunu bile uygulamanız gerekmeyebilir. Birçok activity nispeten basittirler ve çok rahat bir şekilde durdurulup başlatılabilirler ve size sadece süregelen işlemleri durdurmak için onPause() metodunu kullanmak kalır.



     Kullanıcı activity’nizden ayrıldığında, sistem onStop() metodunu çağırarak activity i durdurur(1). Activity durdurulduğunda kullanıcı geri gelirse, sistem onRestart()(2) metodunu çağırır ve bunu hızlıca onStart()(3) ve onResume()(4) metodu takip eder. Dikkat etmeniz gereken asıl konu ise ne türlü bir senaryo gerçekleşecek olursa olsun, sistem onStop() metodundan evvel onPause() metodunu çağırır.

Activity Durdurmak


                Activity’niz onStop() metodunu çağırdığında, bu demek oluyor ki artık bu activity daha fazla görünmeyecek ve kullanıcının ihtiyaç duymadığı ne kadar kaynak var ise serbest bırakılacak demektir. Activity’niz durdurulduğunda, sistem kaynağına ihtiyaç var ise bu activity örneği yok edilecektir. Diğer bellek gerektiren ekstra durumlarda, sistem uygulamanızı onDestroy() metodunu çağırmaya ihtiyaç duymadan sonlandırabilir. Bu nedenle onStop() metodunu kullanmanızdaki en büyük fayda sistemin bu yola başvurmadan evvel sizin sistem kaynaklarını serbest bırakmanızdır.
                onPause() metodu onStop() metodundan evvel çağırılmasına rağmen, aşırı sistem kaynağını tüketen işlemleri sonlandırmak için onStop() metodunu kullanmanız her zaman daha verimli bir işlem olacaktır.

                Aşağıdaki örnekte, onStop() metodunun bir uygulaması görülmektedir. Bu uygulama ile geçici belleği not defterinde tutulan kayıtların kaydedilme işlemi icra ediliyor.

ÖRNEK:
@Override
protected void onStop() {
    super.onStop();  // Always call the superclass method first

    // Save the note's current draft, because the activity is stopping
    // and we want to be sure the current note progress isn't lost.
    ContentValues values = new ContentValues();
    values.put(NotePad.Notes.COLUMN_NAME_NOTE, getCurrentNoteText());
    values.put(NotePad.Notes.COLUMN_NAME_TITLE, getCurrentNoteTitle());

    getContentResolver().update(
            mUri,    // The URI for the note to update.
            values,  // The map of column names and new values to apply to them.
            null,    // No SELECT criteria are used.
            null     // No WHERE columns are used.
            );
}

                Activity’niz durdurulduğunda, Activity nesnesi bellekte bir yer tutar ve yeniden çağırıldığında activity devam eder. Bu süreç içerisinde uygulamanızın bileşenlerini yeniden hazırlamanız gerekmemektedir. Sistem ayrıca mevcut duruma ait her bir View’in izini de saklar. Böylece kullanıcı EditText öğesine bir veri girişi yaptığında bu otomatik olarak, sizin herhangi bir saklama prosedürü uygulamanıza gerek kalmadan saklanır.

NOT:
Stopped durumda sistem activity’nizin yok etse bile, bu activitye ait View nesnelerinin durumlarını Bundle içerisinde korur ve kullanıcı aynı activity örneğine geri döndüğünde UI nin son haliyle uygulama çalışmaya devam eder. ( Bir sonraki konuda Bundle hakkında daha detaylı bilgi aktaracağız)

Bir Activity’nin Başlatılması/Yeniden Başlatılması


                Activityniz Stopped durumdan tekrar ön plana geldiğinde, onRestart() metoduna geçer. Ayrıca sistem, activityniz her ön plana geldiğinde olduğu gibi onStart() metodunu da çağırır. onRestart() metodu sadece activity stopped durumdan devam ederken çağırılır. Böylece öncelikle stopped duruma geçen uygulamanız için bazı özel restorasyonları gerçekleştirme imkânı elde etmiş olursunuz.
                Uygulamanın activity durumunu onRestart() metodu ile restore etmesi aslında çok yaygın bir kullanım değildir. Çünkü genel uygulama dünyasında bu tarz bir yönetime pek ihtiyaç duyulmamaktadır. onStop() metodu activitynizin kullandığı tüm kaynakları temizlemek için uygulanmalıdır. Ancak bu işlem sonrası Activity yeniden çağırıldığında durdurduğunuz tüm işlemleri yeniden hazırlamanız gerekecektir. Bunun yanında Activity’niz yeniden oluşturulduğu durumlarda da bu hazırlıkları yapmanız gerekcektir.( hiçbir şekilde activity örneğinizin olmadığı durum). Bu nedenle, onStop() metoduna karşılık olarak her zaman onStart() metodunu kullanmalısınız. Böylece hem onRestart() metodunu hem de onStart() metodunu kullanmak durumunda kalmamış olursunuz. Çünkü sistem yukarıda bahsettiğimiz gibi activitye dönüldüğü anda, onStart() metdounu her iki durumda da çağıracaktır.

Kullanıcı uygulamanızdan uzun süreliğine ayrıldığında, uygulamanıza geri dönmeden evvel onStart() metodu gerekli sistem ihtiyaçlarını ve özelliklerini doğrulamak için doğru metot olacaktır.

ÖRNEK:
@Override
protected void onStart() {
   
super.onStart();  // Always call the superclass method first
   
   
// The activity is either being restarted or started for the first time
   
// so this is where we should make sure that GPS is enabled
   
LocationManager locationManager =
           
(LocationManager) getSystemService(Context.LOCATION_SERVICE);
   
boolean gpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
   
   
if (!gpsEnabled) {
       
// Create a dialog here that requests the user to enable GPS, and use an intent
       
// with the android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS action
       
// to take the user to the Settings screen to enable GPS when they click "OK"
   
}
}

@Override
protected void onRestart() {
   
super.onRestart();  // Always call the superclass method first
   
   
// Activity being restarted from stopped state    
}

Sistem activitynizi yok ettiğinde, Activity için onDestroy() metodunu çağırır. onDestroy() metodunun çağırılmasına ihtiyaç kalmıyor, çünkü genellikle uygulamanızın kullanmış olduğu birçok sistem kaynaklarının onStop() metodunda durdurulması gerekmektedir. Fakat bu metot sistem kaynaklarının gereksiz kullanımını durdurmak için son şansınız demektir. Bu metot ile en son durdurmak isteyeceğiniz işlemleri tanımlamanız cihaz sistem kaynakları için çok önemlidir. Bunun üzerinde durmamızın sebebi uygulamanızın çalışma performansını ve kullanıcı deneyimin yüksek düzeyde tutmayı amaçlamamızdır.


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

Android-ActivityLifeCycleYönetimi-BirActivityDuraklatmakVeDevamEttirmek

Bir Activity Duraklatmak ve Devam Ettirmek


                Normal uygulama kullanımı sırasında, ekranda aktif olan activity diğer görsel bileşenler tarafından arka plana itilir ve activty’i pause konumuna geçirir. Örneğin, yarı-transparan bir activity (dialog kutuları gibi) açıldığında, bir önceki activity pause edilir. Diğer activity ekranda kaldığı sürece asıl ekran dikkat dışıdır ve paused (duraklatılmış) konumda bekler.
                Activity tamamen görünmez olur ve arka plana geçirilirse, Stopped(durdurulmuş) konuma geçer. (Bir sonraki konu bununla alakalı olacak)
                Activity’niz paused duruma geçtiğinde, sistem uygulamanızın sürdürdüğü işlemleri durdurmak için veya kullanıcının son işlemlerini kaydetmek için kullanabileceğiniz activity’niz içinde kodlanmış olan onPause() metodunu çağırır. Eğer kullanıcı paused durumdan activity’e geri dönüş yaparsa sistem uygulamanıza devam etmek için onResume() metodunu çağırır.

NOT:
Activity’niz onPause() metodunu çağırdığı anda, bu kullanıcını bir süre sonra uygulamanıza veya activity’nize geri döneceği anlamına gelir. Ancak genelde böyle olmaz ve kullanıcı activity’den tamamen ayrılır.



Activity’niz yarı transparan bir view tarafından arka plana itildiğinde, sistem onPause() metodunu çağırır ve activity paused(1) durumda bekler. Eğer kullanıcı activity’niz paused konumundayken geri gelirse, sistem onResume() (2) metodunu çağırır.

Activitynizi Duraklatmak


                Sistem onPause() metodunu çağırdığında bunun anlamı activity’ni kısmen görünür durumdadır. Ancak durum buna işaret etse de genel olarak kullanıcı activity’den ayrılmıştır ve yakında activity’niz Stopped duruma geçecek demektir. onPause() metodunu kullanmanız gereken durumlar;
·         CPU tüketebilecek, Animasyon veya diğer süregelen işlemleri duraklatmak için,
·         Kaydedilmeyen değişiklikleri sormak için ( tabii ki kullanıcının bu şekilde bir uyarı almasını gerektiren bir uygulama geliştiriyorsanız. Örneğin bir e-mail uygulaması…)
·         Broadcast Receivers(Yayın algılayıcılar), sensor işlemleri veya stopped durumda cihazın pil ömrünü azaltacak diğer kaynakların kullanıldığı uygulamalarda..
Örneğin, uygulamanız Kamera kullanıyorsa onPause() metodu kamerayı serbest bırakmak için ideal bir yerdir.

ÖRNEK:
@Override
public void onPause() {
    super.onPause();  // Always call the superclass method first

    // Release the Camera because we don't need it when paused
    // and other activities might need to use it.
    if (mCamera != null) {
        mCamera.release()
        mCamera = null;
    }
}

Genellikle, kullanıcı değişikliklerini geçici depolama alanlarına kaydetmek için onPause() metodunu kullanmamalısınız.  Bu işlemler için bu metodu kullanmanız gereken tek durum e-mail vb uygulamalarda olduğu gibi otomatik-kaydetme özelliği sağlamak istediğinizi zamanlardır. Ancak, bu işlemi yaparken CPU’nun yoğun kullanıldığı bir onPause()metodu kodlamaktan kaçınmalısınız.(DB yazma işlemleri tanımlamak gibi...) Çünkü bu işlem sırasında sistem kaynakları, geçiş yapılan diğer activity için yeteri kadar alan sahip olmayacağından kullanıcı deneyimini olumsuz etkileyecek bir işlem tanımlamış olursunuz.(yüksek sistem kaynağı kullanımına yol açabilecek işlemleriniz için onStop() metodunu kullanmalısınız.
NOT:
Activity’niz paused durumundayken, Activity örneği bellekte bir yer tutar ve activity e devam edileceği bu örnek geri çağırılır. Bu durumda activity’nizin bileşenlerini yeniden hazırlamanıza gerek yoktur.

Activitynizi Devam Ettirmek


                Kullanıcı activity’nizi durdurulmuş durumdan devam ettireceği zaman, sistem onResume() metodunu çağırır.
                Dikkat etmeniz gereken husus, activity’niz ilk defa oluşturulurken ve her ön plana çıkarılma durumunda bu metot sistem tarafından çağırılır. Eğer onPause() metoduyla durdurduğunuz işlemler varsa veya activity her Resumed duruma geçerken hazırlamanız gerek bileşenler var ise onResume() metodunu uygulamalı ve bu hazırlık kodlarını burada tanımlamanız gerekir.(durdurulan animasyonu tekrar başlatmak veya kullanıcını en son kaldığı konumları tekrar yüklemek için…)
                Aşağıdaki örnekte daha önce bahsedilen onPause() metodunun devamı olacak şekilde tanımlanmış bir onResume() metodu yer almaktadır.

 ÖRNEK:
@Override

public void onResume() {

    super.onResume();  // Always call the superclass method first



    // Get the Camera instance as the activity achieves full user focus

    if (mCamera == null) {

        initializeCamera(); // Local method to handle camera init

    }

}


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