我正在撰写的应用使用HorrorRSS library加载RSS Feed。我面临的问题是看着我看到这个垃圾的日志:
10-06 12:58:36.939: I/global(3159): Loaded time zone names for en in 624ms.
10-06 12:58:37.329: I/global(3159): Loaded time zone names for en in 368ms.
10-06 12:58:37.709: I/global(3159): Loaded time zone names for en in 370ms.
10-06 12:58:38.149: I/global(3159): Loaded time zone names for en in 403ms.
10-06 12:58:38.589: I/global(3159): Loaded time zone names for en in 420ms.
10-06 12:58:39.039: I/global(3159): Loaded time zone names for en in 446ms.
10-06 12:58:39.449: I/global(3159): Loaded time zone names for en in 393ms.
10-06 12:58:39.859: I/global(3159): Loaded time zone names for en in 396ms.
10-06 12:58:40.269: I/global(3159): Loaded time zone names for en in 401ms.
10-06 12:58:40.749: I/global(3159): Loaded time zone names for en in 459ms.
10-06 12:58:41.159: I/global(3159): Loaded time zone names for en in 404ms.
10-06 12:58:41.549: I/global(3159): Loaded time zone names for en in 380ms.
10-06 12:58:41.919: I/global(3159): Loaded time zone names for en in 366ms.
10-06 12:58:42.289: I/global(3159): Loaded time zone names for en in 363ms.
10-06 12:58:42.659: I/global(3159): Loaded time zone names for en in 368ms.
10-06 12:58:43.109: I/global(3159): Loaded time zone names for en in 437ms.
10-06 12:58:43.489: I/global(3159): Loaded time zone names for en in 377ms.
10-06 12:58:43.879: I/global(3159): Loaded time zone names for en in 387ms.
10-06 12:58:44.279: I/global(3159): Loaded time zone names for en in 387ms.
10-06 12:58:44.649: I/global(3159): Loaded time zone names for en in 367ms.
10-06 12:58:45.029: I/global(3159): Loaded time zone names for en in 379ms.
10-06 12:58:45.469: I/global(3159): Loaded time zone names for en in 438ms.
我发现SimpleDateFormat
类存在问题,如this question中所述,它看起来像RssParser.getDate() function uses it to extract the date from the RSS feed。
这些陈述似乎是在我加载Feed之后发生的,即:
RssParser rss = new RssParser();
RssFeed feed = rss.load("some feed url");
// This is where the log statements begin appearing.
我可以理解为什么在第一次调用SimpleDateFormat
时会记录一次。但有谁知道为什么这些陈述被反复记录,以及我如何阻止它们?他们让我的应用程序无法运行,因为Android系统认为它太耗费资源,并且在UI加载之前就已经杀了它。
如果时区名称仅在第一次拨打SimpleDateFormat
时加载一次,那么这将是完全可以接受的。但每次我加载一个RSS源我得到了几十个这样的日志。有没有办法打开缓存或什么?
非常感谢任何帮助。我基本上死在水里,直到我能弄明白。
更新:我已向HorrorRSS项目提交了一个问题,以使其RssParser.getDate()方法受到保护或公开。然后,我将能够提供我自己的实现,使用像JodaTime这样的东西。我认为这会奏效。有什么想法吗?
答案 0 :(得分:1)
我最终将HorroRSS源代码树导入我的并修改了RssParser
类,以便RssParser.getDate()
受到保护。然后我添加了自己的RssParser
子类,它使用我自己的使用JodaTime的RssParser.getDate()
实用程序类覆盖DateParser
:
@Override
protected Date getDate(String dateString, int rssType)
{
return DateParser.getDate(dateString, rssType);
}
HorroRSS的维护者将修改RssParser
以接受自定义日期解析器实现,因此将来不需要修改供应商代码。我的修改只是一个止损,直到那时。