`
SuseLinux
  • 浏览: 26891 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

[转载]巧解Android时区加载过慢的问题

 
阅读更多

我擦。。。Android居然有这样的BUG,今天看日志看出来不正常,网上一搜,果然有问题。


巧解Android时区加载过慢的问题  

2011-06-15 11:35:30|  分类: android|字号 订阅

当在Android系统中切换语言时,会带来一个有趣的bug:SimpleDateFormat在处理“z”时区字段时会花费很长的时间。如果你在一个ListView里多次调用这个方法,就会发现这个ListView在滚动时很不流畅。控制台相关输出如下所示:

view plaincopy to clipboardprint?
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.  
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系统中是被设计为延迟初始化的,只有在第一次使用到时才会去获取,并保存在缓存中,随后都会从这个缓存中去获取。但是根 据之前SimpleDateFormat API的设计,没有方法来达到这个目的。在Android官方issues里也反复提到了这个问题,从2009年被发现到现在,都始终没有解决。

    在期待Android系统修复这个问题或者越来越快的系统硬件支持之外,基本很难处理这个系统原生的bug,但是我们可以通过一个简单的办法来改进这个问 题。核心的思路就是缓存时区带来的偏移值。我们只需要在第一次加载时获取这个偏移值并存储,然后在以后每一次根据这个偏移值算出真实的时间值,代码如下:

view plaincopy to clipboardprint?
public static long cachedTime = -1;   
public static long mtimeToLong(String time) {   
    SimpleDateFormat format = new SimpleDateFormat(   
            "yyyy-MM-dd HH:mm:ss.SSS"); // 获取没有时区的时间格式   
    try {   
        Date date = format.parse(time);   
           
        if(cachedTime == -1) { // 第一次取值时   
            SimpleDateFormat localFormat = new SimpleDateFormat(   
                "yyyy-MM-dd HH:mm:ss.SSSz"); // 获取有时区的时间格式   
               
            Date localDate = localFormat.parse(time);   
               
            long localTime = localDate.getTime();   
            cachedTime = localTime - date.getTime(); // 计算出差值并存储   
            return localTime;   
        } else { // 第一次之后的取值   
            return date.getTime() + cachedTime;   
        }   
    } catch (ParseException e) {   
        e.printStackTrace();   
        return 0;   
    }   
}

分享到:
评论

相关推荐

    c#编程 链环问题 巧解

    c# 链环 问题 巧解结构和函数的应用 (2,3)与(3,2)类似的环节的个数并输出

    第25讲巧解小数与分数互化问题.pdf

    第25讲巧解小数与分数互化问题.pdf

    巧解cpu温度过高问题.docx

    若达到90-100度,可能预示着CPU存在过热问题,需要采取措施降低温度。 2. **清洁和涂抹硅脂**: 清理机箱内部的灰尘,特别是CPU和散热风扇上的灰尘,能有效改善散热。同时,CPU和散热器之间可能因为时间推移而失去...

    一键巧解CPU占用率过高难题.pdf

    标题中的“一键巧解CPU占用率过高难题”指的是如何快速有效地解决计算机处理器(CPU)负载过大,导致系统性能下降的问题。CPU占用率过高通常会使计算机运行缓慢,甚至可能导致系统崩溃。描述中的“专业指导”表明这...

    奥林匹克竞赛千题巧解·初中一年级数学.pdf

    《奥林匹克竞赛千题巧解·初中一年级数学》是一本专门针对初中一年级学生的数学竞赛辅导教材。这本书旨在帮助学生深入理解和掌握奥数中的各种难题,通过巧妙的解题方法提升他们的数学思维能力和问题解决技巧。 在...

    巧解XP升Win8磁盘问题.docx

    在将Windows XP系统升级到Windows 8的过程中,用户可能会遇到磁盘分区的问题,尤其是当他们试图在现有系统上进行格盘操作时。Windows 8在安装完成后会自动将安装的磁盘调整为C盘,因此在升级前需要谨慎选择系统磁盘...

    用数学模型巧解排列组合问题.doc

    《用数学模型巧解排列组合问题》 排列组合问题是数学中的一个重要领域,它涉及到如何有效计算事物的不同排列或组合方式。解决这类问题的关键在于理解并运用分类计数和分步计数这两个基本原理。这两者提供了处理复杂...

    行测数量关系49个常见问题公式法巧解.pdf

    因此,我将根据标题“行测数量关系49个常见问题公式法巧解.pdf”和描述“行测数量关系49个常见问题公式法巧解.pdf”来构建对应的知识点。 行测(行政职业能力测验)是中国公务员考试的一部分,主要测试考生的数量...

    奥林匹克竞赛千题巧解·初中二年级数学.pdf

    《奥林匹克竞赛千题巧解·初中二年级数学》是一本专为初中二年级学生设计的数学竞赛备考指南,旨在帮助学生提升解决复杂数学问题的能力,掌握竞赛中的巧妙解题技巧。该书涵盖的内容广泛,包括但不限于代数、几何、...

    公务员考试行测:巧解青蛙跳井问题.pdf

    公务员考试行测巧解青蛙跳井问题.pdf 在公务员考试的行测考试中,经常会考察青蛙跳井问题,这类问题通常称为正负效率交替的合作问题。本文中,我们将通过详细讲解典型例题,为考生总结出解题技巧。 青蛙跳井问题的...

    如何利用Windows XP安全模式巧解系统问题

    Windows XP 安全模式是一种专为解决系统问题而设计的特殊启动模式,它允许用户以最小的系统资源和驱动程序集来启动操作系统,以便更好地诊断和修复潜在的问题。以下是利用Windows XP安全模式解决系统问题的三个主要...

    齐次平移巧解一类圆锥曲线问题.pdf

    ### 齐次平移巧解一类圆锥曲线问题 #### 概述 本文主要探讨了如何利用坐标平移的方法简化解决一类特定的圆锥曲线问题。这种方法特别适用于那些涉及定点、定值的问题,其中直线斜率是常数的情况。通过对坐标系进行...

    四年级奥数巧解追与问题教(学)案.doc

    《四年级奥数巧解追及问题》 追及问题是奥数中常见的一类问题,主要涉及两个或多个运动物体在相同方向上的运动,其中一方的速度较快,通过一定时间后能够赶上另一方。这类问题的核心在于理解速度差的概念,并利用...

    向量法巧解数学高考题

    该书全面介绍了向量在代数、三角函数、平面几何、立体几何、解析几何方面的应用,重点介绍了在立体几何和解析几何领域的应用。内容独特、题型全面。

    巧解阅读理解中关于作者意图、观点、态度的问题.doc

    巧解阅读理解中关于作者意图、观点、态度的问题.doc

    四年级奥数巧解追与问题教(学)案.doc

    《四年级奥数巧解追与问题》 追与问题是奥数中常见的一类问题,主要涉及两个物体在同向移动时,速度快的物体追赶速度慢的物体的情况。这类问题的关键在于理解速度差的概念,以及如何利用速度差来计算追及时间与追及...

    用位运算巧解元素出现次数问题1

    在编程领域,尤其是在解决算法和数据结构的问题时,位运算经常被用来实现高效且简洁的解决方案。本题目的核心是利用位运算来寻找一个数组中出现次数为奇数的元素,这里具体涉及到的问题是如何巧妙地利用异或操作...

    四年级奥数巧解追及问题教案.doc

    追及问题通常涉及两个或更多的对象以不同的速度朝相同方向移动,较快的对象试图追上较慢的对象。这个问题的关键在于理解速度差和追及时间的关系。 在四年级奥数的教学中,追及问题是一个重要的知识点,它帮助学生...

    数学巧学巧解大全.doc

    《数学巧学巧解大全》是一份详尽的高中数学学习资源,涵盖了广泛的方法和思想,旨在帮助学生高效地理解和解决数学问题。这份文档主要分为三个部分:具体解题方法、数学思想方法以及数学逻辑方法。 第一部分着重于...

    58巧解相同元素的排列问题[归类].pdf

    在排列组合问题中,处理相同元素的排列是一个挑战性较高的课题。在常规的高中数学教育中,主要关注的是不同元素的排列,而相同元素的排列则更多地出现在数学竞赛和部分高考模拟试题中。教师在教学中往往缺乏系统性的...

Global site tag (gtag.js) - Google Analytics