簡體   English   中英

為什么我在SimpleDateFormat中獲得ANR?

[英]Why am I getting ANR in SimpleDateFormat?

我正在顯示通知,並且通知具有時間戳。 我正在使用以下代碼將時間戳轉換為日期格式:

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 = new SimpleDateFormat(pattern); error(ANR) SimpleDateFormat sdf = new SimpleDateFormat(pattern); 這是錯誤日志:

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)

有什么問題

根據JavaDoc, SimpleDateFormat不是線程安全的

日期格式不同步。 建議為每個線程創建單獨的格式實例。 如果多個線程同時訪問一種格式,則必須在外部進行同步。

getTimeFormat(Long unixSeconds, String pattern)刪除靜態對象,並為每個線程創建一個新對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM