SORU
20 ŞUBAT 2011, Pazar


Android Java - Tarih Joda yavaş

Android ile Joda 1.6.2 kullanarak

Aşağıdaki kod 15 saniye kadar kilitleniyor.

DateTime dt = new DateTime();

Aslında bu yazı gönderildi Android Java - Joda Date is slow in Eclipse/Emulator -

Sadece bir kez daha ve hala biraz daha iyi çalıştı. Başkasının bu sorunu olan var mı ya da nasıl düzeltebilirim biliyor musun?

CEVAP
9 HAZİRAN 2011, PERŞEMBE


Ben de bu sorunla karşılaştım. Skeet şüpheleri doğruydu Jon, sorun saat dilimleri gerçekten verimsiz, jar dosya açma ve daha sonra tezahür bu bilgileri almak için okuma yükleniyor.

Ancak, DateTimeZone.setProvider([custom provider instance ...]) çünkü yeterli değil çağırmaktan, bana mantıksız nedenlerle, DateTimeZone getDefaultProvider() çağırır nereye statik başlatıcı vardır.

Tamamen güvenli olması için, hiç joda bir şey aramadan önce bu sistemi özelliğini ayarlayarak bu varsayılan geçersiz kılabilirsiniz.

Örneğin etkinlik, bu ekleyin:

@Override
public void onCreate(Bundle savedInstanceState) {
    System.setProperty("org.joda.time.DateTimeZone.Provider", 
    "com.your.package.FastDateTimeZoneProvider");
}

Daha sonra yapmanız gereken tüm FastDateTimeZoneProvider tanımlayın. Şunları yazdı:

package com.your.package;

public class FastDateTimeZoneProvider implements Provider {
    public static final Set<String> AVAILABLE_IDS = new HashSet<String>();

    static {
        AVAILABLE_IDS.addAll(Arrays.asList(TimeZone.getAvailableIDs()));
    }

    public DateTimeZone getZone(String id) {
        if (id == null) {
            return DateTimeZone.UTC;
        }

        TimeZone tz = TimeZone.getTimeZone(id);
        if (tz == null) {
            return DateTimeZone.UTC;
        }

        int rawOffset = tz.getRawOffset();

            //sub-optimal. could be improved to only create a new Date every few minutes
        if (tz.inDaylightTime(new Date())) {
            rawOffset  = tz.getDSTSavings();
        }

        return DateTimeZone.forOffsetMillis(rawOffset);
    }

    public Set getAvailableIDs() {
        return AVAILABLE_IDS;
    }
}

Bu test ettik ve joda 1.6.2 sürümü ile Android SDK 2.1 iş gibi görünüyor. Elbette daha da optimize edilmiş olabilir, ama benim app (mogwee) profil oluşturma sırasında, bu ~18ms ~500ms den DateTimeZone başlatma süresini azaltır.

Eğer Marathon uygulamanızı oluşturmak için kullanıyorsanız, bu hat Marathon eklemek gerekir.Joda sınıf adını belirttiğiniz gibi tam olarak beklediği için cfg:

-keep class com.your.package.FastDateTimeZoneProvider

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Jimmie Jones

    Jimmie Jones

    16 Kasım 2007
  • TechnoBuffalo

    TechnoBuffal

    8 HAZİRAN 2007
  • TWiT Netcast Network

    TWiT Netcast

    27 EKİM 2005