【问题标题】:Android performance api level 11 and aboveAndroid性能api级别11及以上
【发布时间】:2012-12-11 12:59:12
【问题描述】:

我似乎有一个无法解决的问题,我花了一个周末来解决它,无法解决它。 当我制作一个包含两个活动的简单测试应用程序时: 1. Mainactivity:几个按钮、一个计时器(后台线程)和一个对 SQLite 数据库的轻请求。 2. 第二个活动:几个按钮,只有一个有一个点击监听器,当你点击它时,你只需回到第一个活动。 我使用大按钮(屏幕宽度约为屏幕高度的四分之一),xml 布局资源不包含任何嵌套的权重元素或其他奇异的东西。

这是一个测试项目,没有其他功能。

我遇到了以下严重问题: - 当我将清单文件中的 api 级别设置为 3 时,一切正常。 (在兼容模式下自动屏幕) - 当我将 api 级别设置为 11 或更高时,加载第二个活动最多可能需要 10 秒。 第一次打开第二个activity后,东西好像被缓存了,延迟不复存在了。 -当我将api级别设置为11或更高时,我强制(屏幕分辨率)兼容模式:没有变化,延迟仍然存在。

我已经构建了这个测试项目,因为我在升级旧应用时遇到了这个问题。它在较旧的 api 级别上运行顺利,每当我将它放到 Android 版本 3 或更高版本时,它都会延迟长达 25 秒! (即使是打开一个只显示静态文本的活动......)。

我正在新的 Galaxy Tab 上进行测试,这不是问题。我花了几个小时在谷歌上搜索解决方案,但从未找到任何接近它的东西。我什至完全卸载了 Eclipse 和所有 android 资源,并重新安装和更新了所有内容(包括我的 Galaxy Tab 的出厂重置)。没运气。

我做了一个跟踪,问题出在 GLES20Canvas.nDrawDisplayList 中。构建这个列表似乎需要很多时间,即使构建的内容不多……

有人知道我该如何解决这个问题吗?

谢谢, 马丁

【问题讨论】:

    标签: android performance


    【解决方案1】:

    通过查看这篇文章,我找到了解决此问题的方法: http://code.google.com/p/android/issues/detail?id=22514

    解决方法是禁用硬件加速。

    AndroidManifest.xml,在您的应用程序标签中,添加:

    android:hardwareAccelerated="false"
    

    现在一切都恢复正常了。不幸的是,硬件加速不会让您的应用在启动时运行得更快。

    【讨论】:

    • 您可能不想为所有设备禁用硬件加速,请参阅 -> stackoverflow.com/a/21791909/546901 我只在一台设备上注意到这个问题,HTC 设备。 traceview 结果显示问题出在 nDrawDisplayList 上。我尝试过的任何其他设备的 Traceview 结果都很好。它似乎暗示设备或操作系统级别的错误,而不是应用程序代码的错误。在人们报告看到此问题的设备(HTC One 或 Galaxy Nexus)上,使用低深度列表视图或滚动视图似乎很容易重现。
    【解决方案2】:

    GLES20Canvas.nDrawDisplayList

    当它出现时,它是 expected to have a large portion of the time if you are drawing a lot, especially very big views

    我希望你给你来自android-30-hardware-acceleration的注意事项链接

    【讨论】:

    • 谢谢。我以前读过那篇文章并进行了实验。没运气。事实是,即使是一个简单的 textview 也需要几秒钟来渲染(布局中没有其他内容)。到目前为止,我发现的唯一可行的解​​决方案是禁用硬件加速。
    • Romain Guy 只是为 Google 辩护,懒得解决开发人员遇到的实际问题。
    猜你喜欢
    • 2014-01-01
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    • 2015-10-11
    • 2014-04-01
    • 1970-01-01
    • 2022-11-03
    相关资源
    最近更新 更多