gpt4 book ai didi

Android Java - Joda Date 很慢

转载 作者:IT王子 更新时间:2023-10-28 23:39:49 27 4
gpt4 key购买 nike

在 Android 上使用 Joda 1.6.2

以下代码挂起大约 15 秒。

DateTime dt = new DateTime();

最初发布此帖子 Android Java - Joda Date is slow in Eclipse/Emulator -

刚刚又试了一次,还是没有好转。其他人有这个问题或知道如何解决吗?

最佳答案

我也遇到了这个问题。 Jon Skeet 的怀疑是正确的,问题是时区的加载效率非常低,打开一个 jar 文件然后读取 list 以尝试获取此信息。

但是,仅仅调用 DateTimeZone.setProvider([custom provider instance ...]) 是不够的,因为出于对我来说没有意义的原因,DateTimeZone 有一个静态初始化器调用 getDefaultProvider().

为了完全安全,您可以在调用 joda 中的任何内容之前通过设置此系统属性来覆盖此默认值。

例如,在您的 Activity 中,添加以下内容:

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

那么你所要做的就是定义FastDateTimeZoneProvider。我写了以下内容:

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;
}
}

我已经对此进行了测试,它似乎可以在带有 joda 1.6.2 版的 Android SDK 2.1+ 上运行。它当然可以进一步优化,但是在分析我的应用程序 (mogwee) 时,这将 DateTimeZone 初始化时间从 ~500ms 减少到 ~18ms。

如果您使用 proguard 来构建您的应用程序,则必须将此行添加到 proguard.cfg,因为 Joda 期望类名与您指定的完全相同:

-keep class com.your.package.FastDateTimeZoneProvider

关于Android Java - Joda Date 很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5059663/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com