我使用一种方法将Date
列表转换为String
以向用户显示。这种方法适用于API< 24但是当我在Android N的设备上使用它时,它会冻结我的应用程序(该设备是三星SMT-580)。
这是我的方法:
protected List<String> getValidPeriods() {
ArrayList<String> validPeriods = new ArrayList<>();
Date startDate = isSnis() ? Config.snisStartDate() : Config.dashboardsStartDate();
Date endDate = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(startDate);
while(calendar.getTime().before(endDate)){
validPeriods.add(DateUtils.format(calendar.getTime(), PERIOD_FORMAT));
calendar.add(Calendar.MONTH, 1);
}
return validPeriods;
}
PERIOD_FORMAT
public static final String PERIOD_FORMAT = "MMMM yyyy";
DateUtils.format()
方法的位置是:
public static String format(Date date, String format) {
if (date != null)
return new SimpleDateFormat(format, Locale.getDefault()).format(date);
return "";
}
我可以说这是引发问题的日期格式,因为删除行return new SimpleDateFormat(format, Locale.getDefault()).format(date);
并将其替换为硬编码值会停止冻结应用。另一个指标是我们可以看到在方法跟踪期间需要48.9%的时间:
知道为什么吗?
更新#1 另外,它格式不正确。它应该给“2016年11月”,并给出“11月0008”。也许这是相关的。
答案 0 :(得分:1)
我在一个
下导入了同样的问题android.icu.text.SimpleDateFormat