2011-11-17 20 views
6

Android 2.1+ uygulamasını kullanın. İşletim sistemi tarafından zaman zaman öldürülen bir hizmetim var (tahmin ettiğim bellek baskısı nedeniyle).Android hizmet ve statik değişkenlerini öldürdü

Bu hizmet, statik üye alan sınıflarını kullanan bazı eyaletleri korur. İşletim sistemi tarafından öldürülen ve yeniden başlatılan hizmete rağmen, değerlerini saklamak için statik alanları bekliyorum.

Fakat öyle görünmüyor. Yeniden başlatmanın ardından, statik değişkenler varsayılan değere sıfırlanır. Ne olması gerekiyordu? Kill/restart'a rağmen kalıcı bir devleti sürdürmenin başka bir yolunu mu kullanmalıyım?

cevap

6

Evet, hizmetiniz öldürüldüğünde olan şey budur. Program bellekten çıkarılır ve belleğe yeniden yüklendiğinde, statik değişkenlerin varsayılan değerlerinin tamamı varsayılır. Başka bir deyişle, programınız için bayt kodu yürütme yürütme yerine geçemez.

Durumu korumak için statik değişkenleri kullanmak genellikle kötü kabul edilir. Onları sqlite veritabanı gibi ön depolamada depolamayı deneyin.

+1

Ayrıca, statik alanların sıfırlanmasından bu yana OS'nin tüm uygulama Java sürecini öldürdüğünü belirtmek isterim. Ve evet bu zaman zaman, bu yazıyı kontrol edin - http://stackoverflow.com/questions/708012/android-how-to-declare-global-variables/4642069#4642069 –

+1

Android gerçekten kalıcı tutmak için hiçbir yol sağlamaz mı her seferinde parlamaktan daha çok devlet var mı? (Örneğin, onDestroy'un çağrılması garanti edilmez!) Servisim bir LOT belirtir ve bu durum her an değiştiğinde flaşa dokunmak zorunda kalırsam pil kullanımını artırır ve flaş korumayı hızlandırır! – Michael

+0

@Michael [onDestroy yöntemine ait belgelerden] (https://developer.android.com/reference/android/app/Activity.html#onDestroy()): Not: Bu yönteme, şu şekilde çağrılıyor: Verileri kaydetmek için bir yer! Örneğin, bir etkinlik bir içerik sağlayıcısında verileri düzenliyorsa, bu düzenlemeler ya onPause() veya onSaveInstanceState (Bundle) öğesinde işlenmelidir, burada değil. –

İlgili konular