Android Java - Joda Date 速度慢

2023-12-21

在 Android 上使用 Joda 1.6.2

以下代码挂起大约 15 秒。

DateTime dt = new DateTime();

最初发布此帖子Android Java - Joda Date 在 Eclipse/模拟器中运行缓慢 - https://stackoverflow.com/questions/4542867/android-java-joda-date-is-slow-in-eclipse-emulator

刚刚又试了一遍,还是没有好转。还有其他人遇到这个问题或知道如何解决它吗?


我也遇到了这个问题。 Jon Skeet 的怀疑是正确的,问题是时区的加载效率非常低,打开一个 jar 文件,然后读取清单以尝试获取此信息。

然而,只需调用DateTimeZone.setProvider([custom provider instance ...])还不够,因为出于对我来说没有意义的原因,DateTimeZone 有一个静态初始化程序,它在其中调用getDefaultProvider().

为了完全安全,您可以在调用 joda 中的任何内容之前通过设置此系统属性来覆盖此默认值。

例如,在您的活动中添加以下内容:

@Override
public void onCreate(Bundle savedInstanceState) {
    System.setProperty("org.joda.time.DateTimeZone.Provider", 
    "com.your.package.FastDateTimeZoneProvider");
}

然后你所要做的就是定义FastDateTimeZoneProvider。我写了以下内容:

package com.your.package;

public class FastDateTimeZoneProvider implements Provider {
    public static final Set<String> AVAILABLE_IDS = new HashSet<String>();

    static {
        AVAILABLE_IDS.addAll(Arrays.asList(TimeZone.getAvailableIDs()));
    }

    public DateTimeZone getZone(String id) {
        if (id == null) {
            return DateTimeZone.UTC;
        }

        TimeZone tz = TimeZone.getTimeZone(id);
        if (tz == null) {
            return DateTimeZone.UTC;
        }

        int rawOffset = tz.getRawOffset();

            //sub-optimal. could be improved to only create a new Date every few minutes
        if (tz.inDaylightTime(new Date())) {
            rawOffset += tz.getDSTSavings();
        }

        return DateTimeZone.forOffsetMillis(rawOffset);
    }

    public Set getAvailableIDs() {
        return AVAILABLE_IDS;
    }
}

我已经对此进行了测试,它似乎可以在 Android SDK 2.1+ 和 joda 版本 1.6.2 上运行。它当然可以进一步优化,但是在分析我的应用程序时(mogwee https://market.android.com/details?id=com.mogwee),这将 DateTimeZone 初始化时间从约 500 毫秒减少到约 18 毫秒。

如果您使用 proguard 来构建应用程序,则必须将此行添加到 proguard.cfg 中,因为 Joda 希望类名与您指定的完全相同:

-keep class com.your.package.FastDateTimeZoneProvider
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android Java - Joda Date 速度慢 的相关文章

  • 避免 XferMode 替换画布上的颜色

    我正在尝试替换使用在画布上绘制的内容的颜色避免Xfer模式 http developer android com reference android graphics AvoidXfermode html 从 android 文档来看 它看
  • listview getChildAt() 返回 null

    我一直在做一个android项目并陷入了一个问题 我用谷歌搜索但没有找到答案 在我的项目中 有一个名为viewsurahfragment它包含一个 id 为的列表视图lv showquran 我想突出显示指定索引处的列表视图的视图 我正在使
  • Android Chrome 忽略 -webkit-text-size-adjust:none 属性。缩小时文本会缩放

    我们的客户请求一个网站 但不想支付移动版本的费用 我们仍在使其在移动设备上运行 当完全缩小时 Android 4 0 上的 Chrome 会缩放一堆文本 我们尝试设置 webkit text size adjust none 属性 但它似乎
  • 未找到 Gradle DSL 方法:“exclude()”

    我正在 Android Studio 中工作 当我在 build gradle 文件中添加该行时 dependencies compile files libs poi ooxml schemas 3 12 20150511 a jar e
  • Android studio 添加外部项目到 build.gradle

    我有一个示例项目 具有以下设置 root Pure Java Lib Android Test Lib Android Test Project 哪里 测试项目 取决于 Test Lib 最后一个取决于 纯Java库 编译项目并启动此设置效
  • react-native-camera (android): takePictureAsync() 抛出错误

    从react native camera调用takePictureAsync 后 我收到此错误 framesToPop 1 nativeStackAndroid userInfo null message Preview is paused
  • eclipse 找不到我的 sdk 文件夹

    我已经在 Windows 7 上的 eclipse helios 上安装了 android sdk 和 adt 插件 但是 当我进入首选项时 我在定位 sdk 位置时遇到了问题 我的 SDK 位置是 C Program Files Andr
  • 从主线程查询android中的数据库

    我使用的是 sql lite 通常查询 1 个表 如果我从主 ui 线程进行查询会不会很糟糕 谢谢 这取决于 如果您的表确实很大 则执行查询可能需要一些时间 并且可能会导致您的应用程序出现明显的延迟 还有 你说你usually仅查询一张表
  • 以编程方式更改小部件布局

    假设我有两个小部件布局 Layout1 和 Layout2 小部件的默认值是 Layout1 但我允许用户选择 他们希望小部件采用哪种布局 所以如果用户更改为 Layout2 如何以编程方式将布局更改为 Layout2 小部件没有像活动那样
  • Android MapView v2 黑屏

    我一直在尝试实现 android 的 MapView v2 除了这个错误之外 我让它工作得很好 This is what it looks like when I load the app from scratch 如您所见 没有任何问题
  • AWS Cognito-获取带有ID的用户信息

    有没有什么方法可以获取 AWS Cognito 池 在 Android 上 中未登录的用户的信息 并知道他的 ID 我尝试了该代码 AppHelper getPool getUser username getDetailsInBackgro
  • Google Play 将我的应用程序版本显示为“随设备而变化”

    我最近在 Google Play 商店更新了我的应用程序 在我的 Play 商店应用程序页面中 版本显示为因设备而异我没有上传多个 apk 而是使用单个 apk 更新了我的应用程序 那么为什么它显示版本为因设备而异 是否有任何设置可以删除此
  • AppWidget 中的进度条

    我在应用程序小部件中使用 ProgressBar 时遇到了一个有趣的情况 文档 http developer android com guide topics appwidgets index html http developer and
  • 如何将点击侦听器添加到 Android/Java Textview 中的字符串中?

    我想要完成的是大多数 Twitter 应用程序中的标准操作 在文本视图中 文本字符串中的单词前面可能有 提及或 主题标签 并且它们实际上能够添加点击侦听器这个词启动了另一项活动 有谁知道这是如何实现的 下面我附上了一张示例照片 显示了我想要
  • 如何使用 Android Volley API?

    我正在考虑在我的下一个项目中实现 Android Volley 库 关于 Volley 的 Google IO 演示 http www youtube com watch v yhv8l9F44qo 但是 我还没有找到该库的任何重要的 AP
  • 从最近打开的应用程序中打开 Android 中的旧活动?

    我有 4 个活动 Launcher MainActivity SingleTask NotificationActivity ExampleActivity 当用户点击通知时 通知活动然后打开示例活动并完成通知活动 当我按下回键时主要活动打
  • Web 服务凭证 - OpenID/Android AccountManager?

    我正在构建一个网络服务 并想使用用户的谷歌帐户凭据 该服务在 GAE 上运行 并将有一个 Web 客户端和一个 Android 本机客户端 这是我第一次尝试类似的事情 我一直在阅读有关 OpenID 和 Android AccountMan
  • Android 位图到 WebRtc I420 帧损坏

    尝试通过 WebRtc 流式传输位图 我的 Capturer 类大约如下所示 public class BitmapCapturer implements VideoCapturer VideoSink private Capturer c
  • onActivityResult() Intent 数据始终为 null

    有人可以告诉我为什么Intent data总是为空 Override protected void onActivityResult int requestCode int resultCode Intent data super onAc
  • Firebase 附加权限。是否要求用户接受

    我目前正在致力于将 Firebase Analytics 集成到我的 Android 应用程序中 我遇到的问题是 Firebase 添加了一些新权限 这些权限是 permission WAKE LOCK com google android

随机推荐