巧解Android時區載入過慢的問題

2021-08-25 21:16:27 字數 1176 閱讀 6794

當在android系統中切換語言時,會帶來乙個有趣的bug:******dateformat在處理「z」時區字段時會花費很長的時間。如果你在乙個listview裡多次呼叫這個方法,就會發現這個listview在滾動時很不流暢。控制台相關輸出如下所示:

i/resources( 471): loaded time zone names for en_us in 1904ms. i/resources( 471): loaded time zone names for en_us in 1400ms. i/resources( 471): loaded time zone names for en_us in 1260ms. i/resources( 471): loaded time zone names for en_us in 1360ms. i/resources( 471): loaded time zone names for en_us in 1232ms. i/resources( 471): loaded time zone names for en_us in 1344ms. i/resources( 471): loaded time zone names for en_us in 1228ms.

其他開發者的反饋可見:

這是因為時區字段在android系統中是被設計為延遲初始化的,只有在第一次使用到時才會去獲取,並儲存在快取中,隨後都會從這個快取中去獲取。但是根據之前******dateformat api的設計,沒有方法來達到這個目的。在android官方issues裡也反覆提到了這個問題,從2023年被發現到現在,都始終沒有解決。參見:

和。在期待android系統修復這個問題或者越來越快的系統硬體支援之外,基本很難處理這個系統原生的bug,但是我們可以通過乙個簡單的辦法來改進這個問題。核心的思路就是快取時區帶來的偏移值。我們只需要在第一次載入時獲取這個偏移值並儲存,然後在以後每一次根據這個偏移值算出真實的時間值,**如下:

public static long cachedtime = -1; public static long mtimetolong(string time) else } catch (parseexception e) }

通過這種簡單的方式我們可以暫時解決android系統的疑難bug,帶來了一種解決問題的不同思路。

Linux巧解 PATH奧秘

枯燥但精闢安裝linux虛擬機器時設定的 path,當使用putty去執行命令時,系統會自動到 path設定的目錄下去找到這條命令執行 而我們在普通使用者的主目錄或其他目錄下去建立乙個指令碼,賦予指令碼可執行許可權後,按理來說指令碼的名稱就可以作為一條命令執行了,比如說建立了名為greet.sh指令...

GRE數學題巧解

解決gre數學難題兩大巧辦法 最小值代入檢驗法 這是數學部分最重要的解題技巧 顧名思義,這種方法通過代入某乙個值求解,將複雜的問題轉化成簡單易懂的代數式。我們前面說過,gre考試所測試的數學知識不超過初中水平,但ets卻輕而易舉地就能把這些題變難,慣用的手段不是屢設陷阱,就是用晦澀複雜的語言來表達乙...

遞迴方法巧解不定方程

多元一次方程往往採用迴圈求解。筆者在與們討論乙個問題 過程中,琢磨出一種演算法,採用遞迴進行多元一次方程的求解。並將解分為整數解和 非負整數解兩種情況,請大家指教。private sub command1 click 演示求x1 x2 x3 x4 x5 10整數解 text1.text dim an...