SORU
6 Aralık 2010, PAZARTESİ


Erişim SharedPreferences UI iş Parçacığı devre dışı yapılmalıdır?

Gingerbread sürümü ile, yeni API bazı, bir tanesi StrictMode ile deneyler yapıyorum.

Uyarı getSharedPreferences() için olduğunu fark ettim.

Bu uyarı

StrictMode policy violation; ~duration=1949 ms: android.os.StrictMode$StrictModeDiskReadViolation: policy=23 violation=2

getSharedPreferences() Telefon UI iş parçacığı üzerinde yapılan olduğun için veriliyor.

SharedPreferences erişim ve değişiklikleri gerçekten UI iş parçacığı devre dışı yapılmalıdır?

CEVAP
6 Aralık 2010, PAZARTESİ


Zaten onunla oynuyorsun sevindim!

Bazı şeyler için not:(tembel mermi şeklinde)

  • eğer bu sorunları en kötüsü ise, uygulama muhtemelen iyi bir noktada. :) Genelde okur daha yavaş olsa da, SharedPreferenced$Editörü kullandığınızdan emin olun yazıyor.() uygulamak yerine commit(). () uygulamak GB yeni ve uyumsuz (ama her zaman güvenli, yaşam döngüsü geçişleri dikkatli). GB ve taahhüt üzerine yansıması koşullu olarak geçerli aramayı kullanabilirsiniz () () Froyo ya da aşağıda. Bunu yapmak için nasıl bir örnek kod ile bir vitamin yapacağım.

Ama yükleme ile ilgili...

  • bir kez yüklü, SharedPreferences ve işlem çapında tekiz önbelleğe alınır. bu sende mümkün olduğunca erken yüklendi almak için bellekte istiyorsun. (eğer SharedPreferences kullanıyorsanız olması gerektiği gibi küçük varsayarak, basit bir XML dosyası...) bazı kullanıcı bir düğmeye basana gelecek zaman hatası istemiyorum.

  • ama her içerik Ara.(...) getSharedPreferences, XML dosyası stat destek UI olaylar sırasında her neyse. bu istatistikler önlemek için istersiniz değişirse diye diye, Bir stat gerekir normal hızlı (ve genellikle önbelleğe alınmış), ama yaffs yok çok yolu eşzamanlılık (ve bir sürü Android cihazlar kaçak yaffs... Droid, Nexus One, vb.) disk önlemek, uçuş ya da bekleyen disk işlemleri diğer arkasında sıkışmamak.

  • muhtemelen onCreate sırasında SharedPreferences yüklemek istersiniz() ve yeniden kullanım aynı örneği, stat kaçınarak.

  • ama eğer gerek yok zaten tercihler sırasında onCreate(), yükleme zamanı durdurduklarını uygulamanızın başlangıç gereksiz yere, bu yüzden genellikle daha iyi bir şeylerimiz olduğu gibi bir FutureTask<SharedPreferences> alt bu başlayacak yeni bir iş için .() alt kümesi var FutureTask değer. O zaman sadece arama FutureTask<SharedPreferences>'in ihtiyacınız olan her an ve üyesi .() alın. Bu da ileride kamera arkası ücretsiz yapmak için, şeffaf planlıyorum. Bazı örnek kod serbest bırakmak için çalışacağım gösterileri bu alanda en iyi uygulamaları.

Android Geliştiricileri, önümüzdeki hafta içinde StrictMode ile ilgili konular(s) gelecek mesajlar için blog kontrol edin.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • FND Films

    FND Films

    2 Mayıs 2006
  • FrameCityJackal

    FrameCityJac

    4 Aralık 2010