Android Programlama – lifeCycle, onPause(), onResume()
Merhaba arkadaşlar,bugünkü uygulamamızda onPause(), onResume() metodları üzerinde duracağız. Bir önceki yazımızı okumayanlar buradan okuyabilir. Okumak istemeyenler bir önceki uygulamayı indirip üzerinde devam edebilirler.
Diğer yazılarımız;
- Eclipse Üzerine Android Sdk Kurulumu (Resimli ve Detaylı Windows – Linux – Mac İçin Anlatım)
- Android Programlama – Basit Form Uygulaması
- Android Programlama – TableLayout-Radio Button
- Android Programlama – ListView-Spinner-AutoCompleteTextView-Adapter
- Android Programlama – Özelleştirilmiş ListView
- Android Programlama – TabView, TabHost, TabWidget, FrameLayout – DatePicker
- Android Programlama – Menu, Toast, AlertDialog
- Android Programlama – Progress Bar, Thread
Bugünkü çalışmamızda uygulamamız çalışırken, meydana gelen lifecycle (yaşam döngüsü) dan bahsedeceğiz. Activity ler bir durumdan başka bir duruma geçerken aşağıdaki metodlar çalışır.
- void onCreate(Bundle savedInstanceState)
- void onStart()
- void onRestart()
- void onResume()
- void onPause()
- void onStop()
- void onDestroy()
Bugünkü yazımızda onPause() ve onResume() metodlarını kullanarak, arkaplanda çalışan bir uygulamayı yeri geldiğinde durdurup, yeri geldiğinde devap ettireceğiz.
Bunun için bir önceki uygulamamızda yazdığımız ve arkaplanda çalışan “iş” imizi daha da büyüteceğiz ve uzun sürmesini sağlayacağız. Yapmamız gereken değişiklik Runnable task metodunu 0 dan 30 a değilde 0 dan 100 e çıkarmak.
Şimdi ise activity miz kesintiye uğradığında thread çalışmasını durduracağız. Bunun için AtomicBoolean tipinde isActive adında class içinde yerel bir değişken tanımlıyorum.
ve initial olarak true değeri veriyorum
ayarladığımız bu yeni değişkene göre şimdi task() metodumuzu güncelleyelim ve isActive kontrolünü ekleyelim. Böylece false olduğunda loop dursun.
veee artık asıl işlemimiz olan onPause() metodunu yazmaya geldi sıra, override ederek şu şekilde dolduruyoruz. Tek yaptığımız isActive değişkenini false yapmak.
Şimdi nasıl çalıştığına bir bakalım. Öncelikle ben şu şekilde test ediyorum. isActive komutunu yoruma alıyorum. Böylece loopu kesmeyeceğiz.
Programı çalıştırıyorum. ve Run komutunu veriyorum.
Daha sonra progress bar yarıya geldiğinde yeşil arama tuşuna basıyorum. Böylece başka activity devreye girecek ve onPause() çalışacak.
Biraz zaman geçtikten sonra geri tuşuna basıyorum.
ve progress barın kaldığı yerden devam ettiğini görüyorum.
Şimdi isActive değişkenimizdeki yorumu kaldıralım ve amaçladığımız şekilde çalışmasını inceleyelim.Amacımız neydi? Arama tuşuna bastığımızda onPause() çalışacak ve isActive false değerini alacak böylece progress bar geri tuşuna bastığımızda devam etmeyecek. Çünkü isActive değişkeni false olduğundan döngü bitecek. Yani başka bir activity araya girdiğinde progress bar beklemeyecek ve bitecek.
Ama biz onResume() metodunu da override ederek. Geri geldiğimizde progressbarı kaldığı yerden tekrar çalıştıracağız. Progress barı çalıştırmak için koşulumuz progress değişkeninin 0 değerinden büyük olması. Çünkü 0 ise progress bar daha önce çalışmamış demek ve bizim devam ettirmemize gerek yok.
Şimdi onResume() metodunu override edelim.
startWork() kodumuzuda ekleyelim.
Bu düzenlemeye göre ben onOptionsItemSelected() metodunda da şu değişikliği yapıyorum
Şimdi yine aynı yöntemle test edebiliriz. Öncelikle run komutunu veriyoruz. O çalışırken yeşil arama tuşuna basıyoruz. Sonra geri tuşuna bastığımızda kaldığı yerden devam ediyor.
Çalışıyor ancak bir sorun var. Bir kez çalışıyor, ikinci kez denersek çalışmadığını göreceğiz. Bunu çözmek için task() metodunda son bir değişiklik yapıyoruz.
Son değişiklikle beraber bu yazımızın da sonuna geldik. Bu yazımızda Android işletim sisteminde yaşam döngülerinde çalıştırılan metodlardan ikisinin kullanımına örnek verdik. onPause() ve onResume() metodlarıyla programımız askıya alındığında arkada çalışan işi durdurup, geri geldiğinde bizde işi devam ettiriyoruz.
Takip etmeye devam edin!
Bunlara da Göz Atmak İsteyebilirsiniz.
<<< Önceki: Hosting Çözümleri
Sonraki: Android Programlama – Landscape, Portrait, String.xml >>>
Merhaba, aşağıdaki linkteki kaynak kodu paylaşılmış uygulamayı gerçekleştirdim, çıkış sayısını 8 olarak artırdım ve dimmer özelliğini de eklemeyi düşünüyorum. Ancak programın bir handikapı var geri tuşuyla yada ana menü tuşuna basıldığında program ile donanım arasındaki bağlantı kopuyor çıkışlar sıfırlanıyor. Geri ve menü tuşlarına basılsada programın geri planda çalışmasını ve donanımla bağlantısının kopmamasını nasıl sağlarız. Sizin bu yazınızdan yola çıkılarak birşeyler yapılabilir ama ben javada yeniyim bu background olayı biraz karmaşık geldi.Nasıl bir yol izlemeliyim teşekkürler.
http://mitchtech.net/android-ioio-simple-digital-output/
Merhaba,
Bahsettiğiniz şekilde uygulamanın arkaplanda çalışmaya devam etmesi için service kullanmanız gerekmektedir. onPause() ve onResume() ile sadece uygulamadan çıkış yapıldığında ve geri gelindiğinde çalıştırılabilir. Süreklilik sağlayamazsınız. Android service kullanarak programdan çıksanız dahi o arkaplanda çalışmaya devam eder. Kısa süre içinde service le alakalı yazı yazacağım.
İlginiz için teşekkür ederim, service ve arkaplanda uygulama çalıştırma ile ilgili webde Türkçe bir bilgiye rastlayamadım, büyük bir boşluğu doldurmuş olursunuz iyi çalışmalar.
Merhaba,
Yazılarınızı ilgiyle takip ediyorum. Android de uygulama yazma konusunda yeniyim. Kedi işlemi kolaylaştıracak bazı hesapların yapıldığı bir uygulama yaptım. Fakat Geri tuşu ile daha önce girdiğim activitelerden geri dönüyor ve en sonunda uygulamayı kapatıyorum. Fakat kısa bir süre sonra uygulama tekrar kendi kendine çalıyor. Tekrar geri tuşuna basarak kalıcı olarak programın kapanmasını saglıyorum. Acaba bu sorunu nasıl çözebilirim. Geri tuşunu kendim nasıl yönetebilirim. Geri tuşuna bastığımda programı ben yönlendirmek istiyorum uygulamanın ilk activitesine geldiğimde Geri tuşuna basarsam Uygulamadan çıkmak istiyormusunu sorusuna vereceğim cevapla çıkmasını yada devam etmesini nasıl sağlarım. Cevabınız için şimdiden teşekkür ederim.
Veysel,
Geri tuşuna basıldığında işlem yapmak için onBackPressed() methodunu override etmen gerekiyor. Bu methodun içinde AlertDialog kullanarak kullanıcıdan çıkmak için onay alabilirsin.
[…] yani yok edilebilir. Bu durum çok önemlidir!!! Kaynaklar : Mobikolik, DroidAddiction , KodMerkezi […]
Yorum Bırakın!
En Son Yazılanlar
Codeigniter Dersleri
Kategoriler
Teknoloji Haberleri
Android Dersleri
Arşiv
Sitemizin QR Kodu
Yeniliklerden İlk Sizin Haberiniz Olsun
KodMerkezi.Net Facebookta
En Çok Okunanlar
En Son Aranan Kelimeler
En Çok Oy Alanlar
Etiket Bulutu
İlginizi Çekecek Siteler
Arşiv
Yönetim
En Son Yapılan Yorumlar
En Çok Okunanlar