Android N上的SimpleDateFormat冻结应用程序

时间:2017-08-08 10:31:47

标签: android performance simpledateformat android-7.0-nougat

我使用一种方法将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%的时间:

enter image description here

知道为什么吗?

更新#1 另外,它格式不正确。它应该给“2016年11月”,并给出“11月0008”。也许这是相关的。

1 个答案:

答案 0 :(得分:1)

我在一个

下导入了同样的问题
android.icu.text.SimpleDateFormat