Android 用西班牙语处理Date.getTime()需要花费大量时间
我正在尝试在我的应用程序中将Android 用西班牙语处理Date.getTime()需要花费大量时间,android,date,android-sdk-2.3,gettime,Android,Date,Android Sdk 2.3,Gettime,我正在尝试在我的应用程序中将“yyyy-MM-dd'T'hhmmszz”转换为unix时间。 这是我的代码: public String getCreatedAt() { String formattedCreatedAt = twitterCreatedAt.replace(":", ""); SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd'T'HHmmssZZ");
“yyyy-MM-dd'T'hhmmszz”
转换为unix时间。
这是我的代码:
public String getCreatedAt() {
String formattedCreatedAt = twitterCreatedAt.replace(":", "");
SimpleDateFormat dateFormat = new SimpleDateFormat(
"yyyy-MM-dd'T'HHmmssZZ");
try {
formattedCreatedAt = Long.toString(dateFormat.parse(formattedCreatedAt).getTime());
formattedCreatedAt = formattedCreatedAt.substring(0, formattedCreatedAt.length() - 3);
} catch (ParseException e1) {
e1.printStackTrace();
return "0";
}
return formattedCreatedAt;
}
我(奇怪的)问题是,当设备使用英语时,一切正常,但当我使用android 2.3.6在galaxy s2中将设备语言更改为西班牙语时,代码行formattedCreatedAt=Long.toString(dateFormat.parse(formattedCreatedAt.getTime())代码>需要花费更多的时间来处理。为什么会这样?谢谢
这是需要花费很长时间的部分:
dateFormat.parse(formattedCreatedAt);
据此:
SimpleDataFormat,第一次尝试解析时(或者,
格式化)一个日期,将加载您的所有时区数据
场所这将需要2-3秒。希望这一点能够得到解决
在Android的未来版本中修复
在此期间,考虑使用异步任务来“热身”简化格式。
在你需要它之前,在你的过程中。只需解析数据库中的某个日期
AsyncTask doInBackground()以使其在某个时候加载时区
当它不会对用户产生太大影响时。一旦在您的
进程,SimpleDataFormat将快速运行,直到您的进程完成
终止
这里有一个示例,您可以找到一个解释:
这是由于时区字符串的延迟初始化造成的。
只有第一个电话会花这么长时间。如果SimpleDataFormat是
之后再次使用它是从缓存加载的,不应该使用它
很长时间了
在更改之前,它是在加载类时完成的,因此
一项活动的开始花费了2-3秒的时间。这有一个
对用户体验的影响要比那些
当它第一次实际使用时的秒数。问题是
由于设计的原因,目前无法回避这个问题
SimpleDataFormat api。只有速度更快的手机才能通过
收集这些字符串所花费的时间更少
缓存发生在SimpleDataFormat使用的DateFormatSymbols中
使用。通过重用该实例,只需加载
刺一次(对同一根刺)。您还可以创建该实例
在活动启动时在线程中,以便它已被缓存
一旦它被使用。要初始化字符串,只需调用.hashCode(),它
强制初始化缓存。稍微快一点但不那么简单的方法是
序列化实例。这还强制初始化缓存
由于这种情况仅在第一次调用函数时发生(由于时区字符串的初始化),因此我建议(正如他们所说)使用“预加载”SimpleDataFormat
。我想这会解决你的问题。你能把这一行分成许多行吗?比如先解析字符串,然后获取call getTime,最后使用Long的toString方法,看看什么需要时间?我添加了一个需要很长时间的特定命令。这是一个“解析”过程