gpt4 book ai didi

android - 当前 Joda Time 在 Android 上的表现?

转载 作者:行者123 更新时间:2023-11-30 01:06:11 25 4
gpt4 key购买 nike

过去听说过有关在 Android 上使用 Joda Time 的性能问题。一个具体的例子是时区数据加载方式的问题,这导致在应用程序的生命周期中,当不再需要时,大量内存仍被分配。不过,我相信其中一些问题也已在此时得到解决。

除了一般的“我不相信它”的情绪之外,:) 是否有任何当前问题继续使 Joda Time 成为处理 Android 上日期的糟糕选择?

最佳答案

问题依然存在。问题是库对 ClassLoader.getResourceAsStream 的使用。从 Android 6.0.1_r11 开始,此问题尚未得到修复 - 请参阅 here了解详情。

在撰写本文时,默认的 ZoneInfoProvider still uses this mechanism - 来自 master 的当前提示:

private InputStream openResource(String name) throws IOException {
InputStream in;
if (iFileDir != null) {
in = new FileInputStream(new File(iFileDir, name));
} else {
final String path = iResourcePath.concat(name);
in = AccessController.doPrivileged(new PrivilegedAction<InputStream>() {
public InputStream run() {
if (iLoader != null) {
return iLoader.getResourceAsStream(path);
} else {
return ClassLoader.getSystemResourceAsStream(path);
}
}
});
if (in == null) {
StringBuilder buf = new StringBuilder(40)
.append("Resource not found: \"")
.append(path)
.append("\" ClassLoader: ")
.append(iLoader != null ? iLoader.toString() : "system");
throw new IOException(buf.toString());
}
}
return in;
}

在几次跳转中,您可以将此问题方法的用法追溯到 DateTimeZone.getProvider here :

public static Provider getProvider() {
Provider provider = cProvider.get();
if (provider == null) {
provider = getDefaultProvider();
if (!cProvider.compareAndSet(null, provider)) {
provider = cProvider.get();
}
}
return provider;
}

getDefaultProvider() 将创建有问题的 ZoneInfoProvider 类;因此,如果您将 JodaTime 与默认的 Provider 一起使用,您仍然会遇到相同的性能问题。

关于android - 当前 Joda Time 在 Android 上的表现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38857969/

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