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
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
Java tarih ve saat sınıfları kullanın ...
8 Tarih Saat arasındaki farklar Java A...
Android/gün Farkı Java Tarih...
Şimdiki zaman almak ve Android tarih...
java.açıklama.XMLGregorianCalendar içi...