AKTİVİTE YAŞAM DÖNGÜSÜ
Uygulama componentleri şu şekildedir.
- Activities (Aktiviteler)
- Services (Servisler, GPS servisler vs. )
- Broadcast Receivers (Bir uygulamanın başka bir uygulamaya veya bir aktiviteden başkasına yayın yapması)
- Content Provider (İçerik sağlayıcılar , Uygulamadan başka bir uygulamaya veri aktarımı, Rehberden köklere erişim vb. )
Kısaca bahsettiğimiz bu componentlerden biz aktiviteleri ele alacağız. Android’in temelini oluşturan aktivitelerin işleyiş ağacı aşağıdaki gibidir.
Aktivite çalıştığı anda onCreate methodu harekete geçiyor. Zaten hatırlarsınız bir aktivite oluşturduğumuzda bu ister main activity ister başka bir aktivite olsun android studio önce onCreate methodunu oluşturuyor. Hatırlarsınız gerekli tüm setlemeleri burada yapıyorduk. SharedPreferences, değişkenler, initialize işlemleri… Önce bu method çalıştığı için uygulama hata vermeden burada bu işlemleri yapmak isteriz.
Daha sonra onStart() geliyor. Artık uygulama başladı.
Sonrasında onResume() var. Kullanımında onCreate() gibi kullanabiliyoruz. Bir sayfadan diğerine gittik geri döndüğümüzde eğer biz aktiviteyi sonlandırmamış isek onCreate tekrar çalışmaz. Bu gibi durumlarda onResume() içinde sayfayı yenile, tekrar yükle gibi komutlar vererek uygulamanın aksamadan yenilenmiş bir şekilde sürmesini sağlayabiliriz.
Aynı şekilde onDestroy()’da onCreate’ı tekrar çalışmasını sağlayabilir. Uygulamada başka bir aktiviteye geçildi veya uygulama alta alındı bu durumda biz finish() işlemini yapmamış isek uygulama kapanmaz ve döndüğünde onResume() ile çalışmaya devam eder. Bu da örneğin bir uygulamada onResume()’da bir tanımlama yapılmamışsa akış ekranının yenilenmemesi gibi sorunlara yol açabilir.
Bu sebeplerden ötürü bu aktivite yaşam ağacı programı kodlayan kişiler tarafından düşünülmeli ve ona göre hareket edilmelidir.
CONTEXT
Kısaca : Android projeler içinde ne olup ne bittiğini takip etmek için bir yapıdır. Her şey birbiriyle context sayesinde haberdar olurlar. Context’leri kullanırlen uygulama hangi durumda işlem yapacak iyi anlaşılmalıdır.
ActivityContext’e ulaşmak için genellikle this veya ActivityContext
AppContext için applicationContext
Tabi this’in çalışması için( ActivityContext olarak) farklı bir obje içinde çalışmadığına da dikkat edilmelidir.
INTENT İŞLEMİ
Intent methodu en basit haliyle anlatmak istersek kamyon görevi görmektedir. Sen kamyona bir şeyler yüklersin o bu kasasındaki elementleri başka bir yere götürür. Mesela bir aktivite başlatmak için intent kullanabiliriz. Galeriden bir resim getirmek veya başka bir uygulamadan bir şey getirmek için intent kullanabiliriz. Bu çok fazla çeşitlenebilir. Şimdi kısaca intent üzerinden diğer aktivitelere veri aktarımı üzerine konuşalım.
Bir buton atayalım ve bu buton diğer aktiviteye geçiş yapsın
fun next (view : View ) { var intent = Intent (applicationContext,NextActivity::class.java) startActivity(intent) }
Bu haliyle diğer aktiviteye geçebiliriz. Ama içerisine veriler eklediğimizde ise şu şekilde oluyor
fun next (view : View ) { var intent = Intent (applicationContext,MainActivity::class.java) intent.putExtra("name" , name) intent.putExtra("age", age) startActivity(intent) }
NextActivity’de ise bu verileri şu şekilde alıyoruz.
val intent = intent val name = intent.getStringExtra ("name") val age = intent.getIntExtra ("age")
Yani mevzu bu şekilde bu daha fazla çeşitlendirilebilir. Bundan sonrası sizin hayal gücünüze bağlı olarak çeşitlenebilecek çok önemli bilgilerdir.
NOT : Burada intent ile aktardığımız şeyleri SharedPreference ile de aktarabilirdik. Yani doğrudan başka bir aktiviteye geçildiği gibi durumlarda intent bu görevi üstlenir sadece bu iş için özelleşmiştir. Ama uygulama genelinde mesela username ve şifre her zaman kayıt olması ve her sayfada aynı olması gerekir bu gibi durumlarda sharedpreference ile de verileri çekmek daha mantıklı olur. Şuan basit bir şekilde küçükte olsa işlevsel bir uygulama yapabilir duruma geldik. Bu bilgilerle şifreli bir günlük uygulaması bile yapılabilir. Girişinde kayıt olunan sonrasında şifre ile kayıtları görebildiğin bir günlük uygulaması bu ilk aklıma gelen şekli. Konular derinleştikçe çok daha fazlasını yapabileceksiniz.
UYGULAMADA İSTENMEYEN BİR HATA ALIYORUM
Uygulamaya bakıyorsunuz her şey düzgün fakat bir hata alıyorsunuz. Bu benim özellikle harddiskimin arızalı oluduğunu bilmediğim zamanlarda başıma çok geliyordu. Fakat başka sebeplerden ötürü de başımıza gelir. Yapmamız gereken yukarı panelden şu adımları izlemek :
Build – > Clean Project
Build – > Rebuild Project
Eğer bu ikisi ile çözülmedi ve hala bazı kütüphaneleri falan görmediğinden kaynaklı hatalar veriyorsa
File -> Invalidate Cache / Restart
Bu adımı takip etmemiz gerekir. Bu artık tamamen önbelleği silip uygulamayı tekrar başlatmak manasına gelmektedir ve çoğu zaman işe yarar. Bazen hala hatalar vermeye devam edebilir. Bazen internet bağlı olmadığından bazen ise farklı sebeplerden olabilir bu hatalar. Ama bir problem olmadığını düşünüyorsanız yukarıdaki adımlar yüzde 90 oranında hata almamanızı sağlayacaktır.