Java 为什么我在SimpleDateFormat中获得ANR?

Java 为什么我在SimpleDateFormat中获得ANR?,java,android,timestamp,simpledateformat,android-anr-dialog,Java,Android,Timestamp,Simpledateformat,Android Anr Dialog,我正在显示通知,通知具有时间戳。我正在使用以下代码将时间戳转换为日期格式: public static String getTimeFormat(Long unixSeconds, String pattern) { //Example EEE MMM dd HH:mm:ss z yyyy; Date date = new Date(unixSeconds); SimpleDateFormat sdf = new SimpleDateFormat(pattern);

我正在显示通知,通知具有时间戳。我正在使用以下代码将时间戳转换为日期格式:

public static String getTimeFormat(Long unixSeconds, String pattern) {
    //Example EEE MMM dd HH:mm:ss z yyyy;
    Date date = new Date(unixSeconds);
    SimpleDateFormat sdf = new SimpleDateFormat(pattern);
    sdf.setTimeZone(timeZone);
    return sdf.format(date);
}
我正在传递时间戳和模式(“MMM”或“dd”或“yyyy”)。对于每个通知,此方法被调用100次,以显示通知时间,就像我显示100个通知一样。在Android中,如果Android应用程序的主线程(UI)被阻塞的时间过长,则会触发“应用程序无响应”(ANR)错误。我在
SimpleDateFormat sdf=newsimpledateformat(模式)处得到错误(ANR)。以下是错误日志:

Caused by: com.github.anrwatchdog.ANRError: Application Not Responding
Caused by: com.github.anrwatchdog.ANRError$$$_Thread: main
at java.lang.Object.internalClone(Native Method)
at java.lang.Object.clone(Object.java:241)
at java.text.Format.clone(Format.java:258)
at java.text.NumberFormat.clone(NumberFormat.java:599)
at java.text.DecimalFormat.clone(DecimalFormat.java:1095)
at java.text.SimpleDateFormat.initialize(SimpleDateFormat.java:695)
at java.text.SimpleDateFormat.<init>(SimpleDateFormat.java:623)
at java.text.SimpleDateFormat.<init>(SimpleDateFormat.java:598)

有什么问题吗?

SimpleDataFormat不是线程安全的

日期格式不同步。建议为每个线程创建单独的格式实例。如果多个线程同时访问一种格式,则必须在外部对其进行同步


getTimeFormat(长unixSeconds,字符串模式)
中删除static,并为每个线程创建一个新对象。

在后台线程上执行Yea。。我能做到。。但问题是什么?我也有类似的日历问题。检查这个问题当主线程被阻塞时,你会得到这个问题。我正在主线程(UI)中调用它。我确信我没有从任何其他线程调用这个方法。所以不应该有任何同步问题。如果我错了,请纠正我。