2011-05-06 17 views
6

Kısa bir süre önce ilk iPhone uygulamamı başlattım ve Android topluluğundaki kişilerin bunu sormasını istiyorum ... böylece SDK ile geliştirmeye başladım.Android'de uygulama durumunu yönetme (iPhone geliştiricisi için)

Fark ettiğim ilk şey, iPhone uygulamamda appDelegate uygulamasında belirli oturum geniş değişkenlerini saklıyorum. Android'de bu yapıya sahip olmadığımdan, Android geliştiricilerinin uygulama genelinde uygulama durumunu nasıl takip ettiklerini merak ediyorum (umarım tek tonluk nesnelerin bir tonu vardır?)

Tekil nesne yaklaşımı, çoğu geliştiricinin Bunu yapın - kullanıcının "ana" düğmesini tıklatıp simgeyi yeniden tıkladığında uygulamanın temiz bir durumda başlamasını nasıl sağlayabilirim (bu şekilde çoklu görev özelliğini desteklemediğinden emin olmak için manifestime ekleyebileceğim bir şey var mı?) ?)

My uygulama oturumu belirli bir durumdaki bir yeri vardır ve ilk yineleme için henüz çoklu görev :(

cevap

5

Birincisi, android app birden Faaliyetleri oluşabilir.

sen Faaliyetleri Application sınıfını kullanmak arasında durum paylaşmak isterseniz

: Sadece bir Aktivite varsa How to declare global variables in Android?

, o zaman orada devlet kaydedebilirsiniz.

Dikkat: Etkinlik Aktif değilken (GUI göstermiyorsa) bu, öldürüldüğü anlamına gelmez. Yani uygulamanızı kullanır ve kapatırsanız, başka bir uygulamayı açın, ardından uygulamanıza geri dönün, hala "canlı" olabilir (bellekte tutulur) ve durum korunur.

Bunu işlemenin en iyi yolu, Activity lifecycle'a bağlanmaktır. Ardından veriyi istediğiniz zaman ayarlayabilirsiniz/sıfırlayabilirsiniz.

1

Ben Singletons bulmak Android'de uygulama durumunu korumak için en iyi yolu olmaya desteklemeyeceğini uygulamalar. Kullanıcı uygulamayı, o anda odaklanmış Faaliyetin onPause() ve onStop() yöntemlerini kullanarak bıraktığında ve bu noktada verilerinizle ne yapmak istediğinizi dinleyebilirsiniz. İşletim sisteminin işletim sisteminin yaşam döngüsü yönetimini geçersiz kılmaya çalışmak iyi bir uygulama değildir (örn. Back tuşuna basıldığında işleminizi durdurmaya çalışmak). Uygulamanın durumu, kullanıcı uygulamayı terk ettiğinde (Ana ekran tuşuna basılarak veya bir telefon görüşmesi veya bildirimi ile kesintiye uğruyorken veya siz ne yapıyorsanız) her seferinde sıfırlanmasını isterseniz, tüm oturum verilerinizi Etkinliğin kendisine koyun. Kullanıcı bırakıldığında, kullanıcı döndüğünde imha edilecek ve yeniden oluşturulacaktır.

Uygulamanız hakkında bilmediğim belirli özellikler vardır, ancak her ekranın (Etkinlik) ve uygulamanın yaşam döngüsü hakkında bilgi sahibi olduğunuzda, durumunuzu yönetmek için geri çağrıları kullanabilirsiniz. ancak uygun görürsünüz. Eğer kullanıcı "ev" tuşuna çarptığında uygulamayı kapatmak istiyorsanız

http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle

+0

Uygulama birden fazla Etkinliğe sahipse ne olur? –

+0

Verileri burada önerildiği şekilde Etkinlikte depolamaya karar verirseniz bir not: Bazı uygulamaların (örneğin, hızlı görüntüleme uygulamaları) sağladığı yön değiştirme veya pop-up geçişleri de Etkinliği durdurup yeniden başlatır. Veriler sadece hafızada saklanır, Aktivite durumu sıfırlar. Bu muhtemelen bu durumda istediğiniz çözüm değildir. –

+0

Bu harika bir nokta, bunu unuttu. – LeffelMania

1

, kendi OnPause yöntemi içine bitirmek() çağırabilir.

Bu bağlantıyı bakınız: Killing android application on pause

+0

Durumlar arasında geçiş yapmak için değişkenlerinizi bir pakette kaydedebilirsiniz. Bkz: http://stackoverflow.com/questions/151777/how-do-i-save-an-android-applications-state – Chris

+0

Android'in cihazınızın sınırlı kaynaklarını yönetme olasılığını ortadan kaldırdığı için uygulamanızı kapatmamalısınız. doğru şekilde. Http://stackoverflow.com/questions/2439978/why-dont-android-applications-provide-an-exit-option http://android-developers.blogspot.com/2010/04/multitasking-android-way sayfasına bakın. html http://blog.radioactiveyak.com/2010/05/when-to-include-exit-button-in-android.html - Uygulamanızı "çıkarıyorsanız" yanlış yapıyorsunuz demektir. – RivieraKid

+0

Bir geliştirici, bitirmek için arama yolunun dışına çıkıyorsa(), bir nedenden dolayı bunu yapıyorlar ve eminim ki çoklu görev üzerindeki etkisini anlıyorlar. Aramanın doğal olarak yanlış bir tarafı yoktur, çünkü tüm ihtiyaçlar, ihtiyaç duyulan zamanlar olduğu için bir sebepten dolayıdır. Programlamada hiçbir şey bir şey değil. Yapacağınız en kötü şey, kaynakları yeniden yüklemeye gerek kalmadan zamanı biraz arttırmaktır. Android Dev blog'unun hiç bir zaman kullanmamayı söylemediğini, sadece sistemin normalde böyle bir çağrı gerektirmeyeceğini, hiçbir zaman gerekmeyeceğini söylemediğini söylemedi. – Chris

İlgili konular