1
我聽說過性能問題過去關於在Android上使用Joda Time。一個具體的例子是時區數據加載方式的一個問題,在應用程序的整個生命週期中,這些數據導致大量的內存在不再需要的時候被分配。不過,我相信這一點也解決了其中一些問題。目前Joda Android上的時間表現?
除了一般的「我不信任」情緒,:)有沒有任何當前問題,繼續使喬達時間處理Android上的日期不好的選擇?
我聽說過性能問題過去關於在Android上使用Joda Time。一個具體的例子是時區數據加載方式的一個問題,在應用程序的整個生命週期中,這些數據導致大量的內存在不再需要的時候被分配。不過,我相信這一點也解決了其中一些問題。目前Joda Android上的時間表現?
除了一般的「我不信任」情緒,:)有沒有任何當前問題,繼續使喬達時間處理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
類;因此,如果您使用默認時間爲Provider
的JodaTime,則仍然會有相同的性能問題。
JodaTime有一個[Android port](https://github.com/dlew/joda-time-android)。不過,不知道它是否真的有必要。 –