zhaotianxiao198521 2013-09-16 08:31 采纳率: 0%
浏览 1108

andorid40 执行以下多次循环后,效率急速下降,求解。

以下玩法

    String _sss = "一个有300个以上字符的字符串。。。";
    Paint _paint = new Paint(); 
    Rect _rect = new Rect();

    long ti = System.currentTimeMillis();
    for(int i =1;i<249;i++){
        _paint.getTextBounds(_sss, 0, i, _rect);
    }
    System.out.println("time "  + (System.currentTimeMillis() - ti));

通过这种方式获取执行总时间。

现象:
1 执行240次时效率很高,大概总耗时20ms。执行250次以上的时候,骤升到大概200ms。
2 android2.x系统都没问题,android4.0系统就有这个问题。
3 把循环的内容换成诸如
String _s = _sss.substring(0, i);
_paint.measureText(_s);
也同样有此问题。
4 不知道为什么,以及如何解决。
5 解决后请客海底捞。

  • 写回答

1条回答 默认 最新

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-02-13 14:21
    关注

    该回答引用ChatGPT

    这是一个 Android 性能问题。


    可能是因为在循环内部创建了多个 Paint 和 Rect 对象,导致内存消耗过多,并最终导致了性能下降。在循环内部多次创建对象是一个昂贵的操作,因此可以尝试将这些对象定义为循环外部的全局变量。


    为了确保性能最佳,您可以尝试以下方法:

    • 将 Paint 和 Rect 对象定义为循环外部的全局变量。

    • 尽量减少在循环内部的创建对象的操作。

    • 对于字符串操作,考虑使用 StringBuilder 代替 String,以减少字符串的复制。

    • 如果您仍然有性能问题,您可以考虑使用性能监视器,以更详细地了解其工作原理。

    评论

报告相同问题?

悬赏问题

  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了