调用Calendar类函数会生成GC_CONCURRENT消息

时间:2015-04-17 13:12:56

标签: java android calendar garbage-collection

我正在为Android编写一个小日历应用程序,我需要Calendar类包含的一些函数(例如:计算一个月的第一天,下个月的当前日期,特定Unix的年份)时间戳等等)

这些函数经常被调用,它们会经常触发GC_Concurrent,导致我的应用程序滞后。

这是我访问日历功能的方式:

private static Calendar cal;

public static int getDayOfMonth(long sec) {
    if (cal == null)
        cal = Calendar.getInstance(TimeZone.getDefault());

    //cal.clear();
    cal.setTimeInMillis(sec * 1000L);
    return cal.get(Calendar.DAY_OF_MONTH);
}

有没有更好的方法来访问函数而不会产生如此多的垃圾或更好的方法来计算我需要的东西?

2 个答案:

答案 0 :(得分:1)

第一个问题:您是否对代码进行了分析?你有多确定这是问题所在?如果已分析且您 确定...


您是否尝试过使用Joda TimeJoda Time Android

一般来说,Java对日期和时间的默认支持非常糟糕。

您可以通过以下方式使用Joda时间执行相同的代码:

public static int getDayOfMonth(long sec) {
  DateTime time = new DateTime(sec * 1000L);
  return time.getDayOfMonth();
}

答案 1 :(得分:1)

你不能停止垃圾收集,它是一个守护程序线程。

它意味着提高绩效;如果它减慢你的程序,那么可能是对象/其他设计缺陷的低效使用导致垃圾收集器有冗余任务。

我不想重复你可能已经知道的事情,但你应该看看@这篇文章,它应该证明是有用的。

Android CalendarView slowing down layout

-Eric