2012-05-10 23 views
5

Birkaç Etkinliği olan bir uygulama üzerinde çalışıyorum. Bir Etkinlik bir sonraki başlar. Bazı Değerleri paylaşmak için Uygulamanın özel bir uygulamasını kullanıyorum (android.app.Application'dan bahsediyorum) MyApplication.
Hepimizin bildiği gibi, Android sistemi daha fazla alana ihtiyaç duyarsa bir uygulamayı öldürür.
Uygulama içeriği öldürülüyor ancak etkinlik değil

  • Ben başka uygulamaları benim uygulamayı açıp sadece bunu (Ana Düğme) kapatmak
  • diğer uygulamalarla gibi kullanabilir ve kullanmak sistem başvurumu çünkü öldürecek
  • : Ama bu soruna yol açar benim App yeniden açtığınızda o hafızayı
  • israf oluyor, ben kullanılan son aktiviteyi açmak istiyor ve MyApplication içinde değerleri boş olduğu için ben bir kuvvet yaklaşabileceğimi

tuhaf şey, sistem DESTR olduğunu Uygulamamdan ayrılıyor, ancak Etkinliği koruyor gibi görünüyor. Bunun neden böyle olduğunu anlamıyorum, çünkü uygulama bir yaşam döngüsüne sahip değil.

Ne sahip olmak isterim:
Uygulamam (tüm uygulama, yalnızca aktivite değil) öldüğünde, son etkinliklerin de öldürülmesini istiyorum. Böylece Uygulamayı yeniden açtığımda, manifest.xml tarafından sağlanan ana aktiviteyi başlatır.
veya
Uygulamamdaki değerler kalıcıdır ve Uygulama bozulursa kaybolmaz. (Birkaç nesne hakkında konuşuyorum, bu yüzden paylaşılan tercihlerin işe yaramayacağını düşünüyorum).
Etkinliklerimi bağlamak için bir hizmet kullanmak istemiyorum, ancak son kullanılan etkinliğin uygulama bağlamına bağlı olduğunu bildirmenin benzer bir yolu var mı?

Umarım benim sorunumun ne olduğunu anlarsınız ve birileri bana bu konuda yardımcı olabilir.

+0

sevdiğim nasıl cevapların hiçbiri Kullanımını açıkça not etseniz bile özel bir Uygulamanızın kullanılmasına işaret ediyor gibi görünüyor: /). Uygulamadan yararlanmayı denediniz mi?ActivityLifecycleCallbacks bile, tamamlamaya çalıştığınız şeyin bu olduğundan emin değilsiniz (ters yönelime ihtiyacınız olabilir). – MikeIsrael

+0

sanırım ** Etkinlik Yığın Geçmişi **, rite atıfta bulunuyorsunuz? – waqaslam

+0

Teşekkürler MikeIsrael haklısınız. Aşağıdaki cevaplar benim sorunumu ifade etmiyor. Etkinlik Yaşam Döngüsünü Kullanma sadece bir çözümdür. Uygulamanın faaliyetlerini yerine getirip getiremeyeceğini ve tüm uygulamanın öldürülmesi durumunda onları öldüreceğini tercih ederim. Etkinlik Yığın Geçmişi, Backbutton davranışını benim sorunumdan ziyade işler. Bunun bir Uygulama Problemi olduğundan, bir Etkinlik Sorunu olmadığından eminim. – joshplusa

cevap

1

Bir şeyleri yapmanın doğru yolu, uygulama durumunuzu kaydetmek olacaktır. Durumunuzu kaydetmek için onSaveInstanceState (Bundle savedInstanceState) yöntemini ve almak için onRestoreInstanceState yöntemini geçersiz kılın.

Eğer büyük veri kümelerini kaydetmek gerekirse

Sen uygulama kapandıktan ve onPause(), onResume() ve onStop() yöntemlerde için istediğiniz şekilde yeniden emin olmalısınız SQL veritabanını

+0

Tipp için teşekkürler ama yazımda yazdığım gibi, bu benim için işe yaramıyor. Anladığım kadarıyla, kendi Nesneleri uygulama durumunda kaydedemiyorum. – joshplusa

+0

O zaman en iyi tahminim, nesnelerinizi kaydetmek için SQL veritabanı kullanmaktır. – Ika

+0

Tamam. Sorunumu çözmenin en güzel yolu neye daha yakından bakacağım. Yardım için teşekkürler! – joshplusa

0

kullanarak düşünün. Uygulamanın durumunu kaydedebilirsiniz savedInstanceState göz atın (ve onCreate bir parametre olarak gönderildiğinde, geri) Başvuru özel uygulamasında

+0

Teşekkürler ancak Uygulama Etkinliği hakkında konuşuyorum. – joshplusa

+0

@joshplusa İkisinden de bahsediyordunuz ve onStops() 'dan sonra yeniden başladığınızda ana aktivitenin başlatılmasını istediniz, değil mi? – keyser

+0

Evet. Şu anda değerlerimi onResume() içinde kontrol ediyorum. Neyse, uygulamayı bitiririm. Bunu yaparak, ana faaliyete her zaman ulaşacağım. Ama bu çok kirli. Belki de Etkinlik Yığını Geçmişine daha yakından bakmak zorundayım. Cevap için teşekkürler! – joshplusa

0

, bir Bayrak eklemek ki: On

public boolean appContextExist = false; 

senin ilk Etkinlik

onCreate ve onResume bağlamları ihtiyacınız Aktivitesi üzerindeki yöntem, aşağıdakileri ekleyin

geçersiz kılma true bayrağı, ayarlayın:

MyApplication myApp = ((MyApplication) getApplicationContext()); 
if (!myApp.appContextExist) { 
    // Code to return to start activity here 
} 
İlgili konular