2011-12-23 13 views
5

Android 4.0.3'te (Ice Cream Sandwich) bir uygulama geliştirdim, aktivite navigasyonunu test etmek için iki aktivite kullanıyorum.Ama Etkinlik navigasyonunda farklı bir davranış gözlemledim.Bu, Android 4.0'da Yeni Bir Uygulama mı?

Etkinlik B'yi Etkinlik B'den Çağırıyorum. Etkinlik B'de finish() yöntemini arıyorum. Böylece Önceki Etkinlik A'yı görebiliyoruz. Tam olarak beklendiği gibi çalışıyor ancak sorun geri navigasyon için (Arama sonlandırma yöntemi veya arka tuşa basma), onResume'i çağırmak yerine onCreate() Yönteminin Etkinlik A'yı çağırmasıdır.). Ancak önceki versiyonlarda böyle davranmıyor. Bu android 4.0 yeni bir uygulama mı? İşte

i hayata örnektir:

Activity_A:

public class Activity_A extends Activity { 

    /** Called when the activity is first created. */ 
    static int count=0; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     TextView text=(TextView)findViewById(R.id.textcontent); 
     text.setText("Activity 1 called:"+(++count)+" Times"); 
    } 

    public void onClick(View v) 
    { 
     Intent intent=new Intent(this,Activity2.class); 
     startActivityForResult(intent, 1); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    Log.d("onActivityResult", "Called with Code:"+resultCode); 
    } 

} 

Activity_B:

public class Activity_B extends Activity { 

     /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     TextView text=(TextView)findViewById(R.id.textcontent); 
     text.setText("Activity 2"); 
    } 

    public void onClick(View v) 
    { 
     setResult(1); 
     finish(); 
    } 
} 

kontrol edin ve ben herhangi bir hata yapıyorsam bana bildirin.

Teşekkürler, Ram.

+0

Soru: OnResume onCreate'dan sonra mı geliyor? Etkinlik B'yi, Android tarafından düşünüldüğünde sanırım tüm Android platformlarında olabilecek bir şey var. –

cevap

1

Bu Android Aktivite belgelerinde (Link here) şöyledir: (yığının üst kısmında) ekranın ön bir aktivite, aktif veya çalışırken

  • edin.
  • Bir etkinlik odağı kaybetti, ancak yine de görünürse (başka bir deyişle, tam boyutlu olmayan veya saydam bir etkinlik, etkinliğinizin üzerine odaklanmış durumda), duraklatılır. Duraklatılmış bir etkinlik tamamen canlıdır (tüm durum ve üye bilgilerini korur ve pencere yöneticisine bağlı kalır), ancak aşırı düşük bellek durumlarında sistem tarafından öldürülür.
  • Bir etkinlik başka bir etkinlik tarafından tamamen engellenirse, durdurulur. Hala tüm devlet ve üye bilgilerini korur, ancak artık kullanıcı tarafından görülemez, bu nedenle penceresinin gizlenmesi ve başka yerlerde bellek gerektiğinde sistem tarafından sıklıkla öldürülmesi gerekir.
  • Bir etkinlik duraklatılmış veya durdurulmuşsa, sistem etkinliği bitirmesini isteyerek veya yalnızca işlemini sonlandırarak bellekten düşebilir. Tekrar kullanıcıya gösterildiğinde, tamamen yeniden başlatılmalı ve önceki durumuna geri yüklenmelidir.

Belki de 3 ve 4 numaralı noktalar sizin için uygundur.

+0

ama bu sadece iki aktivitedir.Ve daha fazla üzerinde 4.0.3 için güncelledikten sonra cihazımda (Samsung Nexus S) ilk 3. parti uygulaması, Sonra nasıl düşük bellek sorunu olabilir? – ram

+0

Etkinlik şemasından - etkinliğiniz eski etkinliği engelliyorsa, etkinlik durdurulur. Sistem belleğe ihtiyaç duymuyorsa ,ResResume yerine Restart start'ı çağırır. Belki programın nereden başlıyor? Sistem belleğe ihtiyaç duymadıkça, onCtop'tan yola çıkmaya yönelik icecream'de herhangi bir değişiklikten bahsetmediler. – Davos555

+0

Tamam Bilgileriniz için çok teşekkürler. – ram

7

Aynı problemim var !! Ayarlar/Geliştirme bölümüne gidin ve 'Etkinlikleri Yok Et' seçeneğinin işaretini kaldırın.

+0

** Not **: - Efekti görmek için telefon yeniden başlatılmalıdır. – Deepak

+0

Android 4.03'te görüntü yakalamak için kamerayı açarsam, görüntüyü yakalamadan veya iptal etmeden önce onActivityResult yöntemini çağırır, bu yüzden sonuç kodu her zaman boş olur ve onActivityResult'ta görüntü yakalama olayını gerçekleştiremedim. Bunun neden olduğu hakkında bir fikrim var mı? Bu i-tab intext 4.04 sürümünde çalışmasına rağmen, ben bunu 4.03 htc üzerinde test ediyorum. –

0

Ve etkinlik kullanımının durumunu devam ettirmek içinSavedInstanceState() ve onRestoreInstanceSate() yöntemleri.

0

Bu cevaba bakınız: https://stackoverflow.com/a/16147110/1306419. Oradan alıntı yapıyorum: AndroidManifest.xml numaranızda etkinlik A (ana etkinlik) lansmanını android:launchMode="singleTop" olarak bildirmeniz gerekebilir. Bunu yapmazsanız, Android The system always creates a new instance of the activity in the target task. anlamına gelen standart başlatma modunu kullanır ve etkinlik yeniden oluşturulur (Android documentation).

singleTop10 ile sistem, görevin arka yığınının üstünde bulunuyorsa, varolan etkinliğinize (orijinal ekstra) geri döner.