Translate

8 Temmuz 2013 Pazartesi

Pausing and Resuming an Activity - Bir Activirt'yi Duraklatma ve Devam Ettirme

Normal bir uygulama kullanımı esnasında, bazen öndeki activity, activitynin duraklamasına sebep olan görsel bileşenler tarafından tıkalıdır. Örneğin yarı saydam bir activity açıldığında (dialog stilleri gibi), bir önceki activity duraklar. Activity kısmen görünür olduğunda ama bu aktiviteye odaklanılmadığı sürece duraklatılmış olarak kalır.

Ancak, activity tamamen tıkalı ve görünmez olduğunda, durmaktadır.

Activity duraklatma(paused) durumuna girdiğinde, sistem duraklatıldığında devam etmemesi gereken (bir video gibi) action'ları durdurmak için veya kullanıcının uygulamadan çıkmaya devam etmesi için kalıcı olarak kaydetmesi gerektiği durumlarda activity'deki onPause() metodunu çağırır. Pause durumundan kullanıcı uygulamanıza geri döndüğünde sistem devam eder ve onResume() metodunu çağırır.

Not: Activity onPause() çağrısı aldığında, bir süreliğine activity'nin duracağını ve kullanıcının activity'ye tekrar döneceğini gösteren bir işaret olabilir. Ancak, bu ilk olarak kullanıcının uygulamanızı terk ettiğine dair bir işarettir.
Şekil 1 - Yarı saydam bir activity, activity'nizi gizlediğinizde, sistem onPause() metodunu çağırır ve activity Pause durumunda bekler(1). Eğer kullanıcı pause durumundayken activity'ye döner ise sistem onResume() metodunu çağırır.


Pause Your Activity - Activity'yi Duraklatma

Activity için sistem onPause() metodunu çağırdığında, bu teknik olarak activity'nin kısmen görünür olduğu anlamına gelir, fakat bu durum çoğunlukla kullanıcının uygulamayı terk ettiğinin ve activity'nin en yakın zamanda Stopped (Durmuş)  durumuna geleceğinin işaretidir. Genellikle onPause() metodunu aşağıdakileri yapmak için kullanırsınız:
  • CPU'yu kaynaklarını tüketebilecek animasyonlar veya diğer devam eden uygulamaları durdurmak için.
  • Kaydedilmemiş değişiklikleri işlemek için, fakat bu değişiklikler sadece kullanıcının uygulamayı terk ettiği zaman kaydedilmiş olmasını umduğu değişiklikler olmalı.(bir eposta taslağı gibi)
  • GPS, yayın alıcılar gibi şarj süresini etkileyebilecek kullanıcının ihtiyaç duymayacağı sistem kaynaklarını serbest bırakmak için.
Örneğin uygulamanız kamera kullanıyorsa, onPause() metodu kamerayı serbest bırakmak için iyi bir yerdir.


@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;
    }
}
Genelde, değişiklikleri kalıcı bir hafızaya kaydetmek için onPause() metodunu kullanmamalısınız. (Bir forma girilen kişisel bilgiler gibi) . Sadece kullanıcının otomatik kaydedilmesini umduğu emin olduğunuz değişiklikleri onPause() metodu içinde tutmalısınız. (eposta taslakları gibi). Ancak, onPause() durumunda bir veri tabanına kayıt yapmak gibi CPU yoğun işleri yapmaktan kaçınmanız gerekmektedir çünkü bu durum diğer activity'ye olan geçişi oldukça yavaşlatır. (böyle ağır yük içeren durumlar onStop() metodunda olmalıdır.)

Not: Activity duraklatıldığında (Pause durumunda), Activity instansı (örneği) bellekte yerleşiktir ve activity devam ettirildiğinde geri çağrılır. Devam (Resume) durumuna kadar olan callback metodlarının çağrılması esnasında oluşturulan bileşenleri tekrar oluşturmaya ihtiyaç gerek olmaz.

Resume Your Activity - Activity'yi Devam Ettirme

Kullanıcı Pause durumundaki bir activity'yi tekrar Resume (devam) konumuna getirdiğinde, sistem onResume() metodunu çağırır. Bu metodun ilk kez yaratılma durumu da dahil olmak üzere activity'nin her öne geldiğinde çağrıldığını unutmayın. Bu nedenle, onPause() sırasında bıraktığınız bileşenleri başlatmak için onResume() metodunu implement etmelisiniz ve activity'nin her Resume durumunda meydana gelmesi gereken diğer başlangıçları da yapmalısınız.

Aşağıda verilen onResume() örneği daha önce yukarıda verdiğimiz onPause() örneğinin karşılığıdır. Bu yüzden activity duraklatıldığında bırakılan kamerayı tekrar başlatır.

@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
    }
}

Hiç yorum yok:

Yorum Gönder