gpt4 book ai didi

Android Traceview - 它包含我的无响应应用程序的答案......我认为

转载 作者:行者123 更新时间:2023-11-29 17:59:32 25 4
gpt4 key购买 nike

昨天,我花了 12 个小时成为 Traceview 的学生。在此之前我什至不知道它的存在(羞愧地低下了头)。

现在我已经克服了它产生的数据带来的绝对冲击,我发现 Traceview 可以归结为几个简单的概念:

  1. 按“EXCL CPU TIME”排序,以确定每个独立方法的使用量。
  2. 查看调用频率和每次调用的 CPU 时间/实时时间。显然应该考虑更高的电话。根据我的大部分经验,如果您按上面的 #1 排序,调用次数过多且花费时间过多的方法也将位于列表的顶部(这是有道理的,因为它们也使用了最多的 CPU)。

无论如何,执行上面的这两个步骤后,我发现 3-4 种方法总是使用我 90% 的 CPU,并占据了我应用程序中的大部分实时延迟。唯一的问题是,这些方法都不是我写的方法,它们是系统方法,例如:

  1. BitmapFactory 方法
  2. WebKit 方法
  3. 和其他系统方法

话虽这么说,但假设如果占用资源最多的是系统方法,那么它一定与我的布局设计有关,这样的假设是否正确?我不知道 BitmapFactory 怎么会这么高,我的布局并不是非常复杂,尽管在一个 Activity 中 BitmapFactory 本身占用了 95% 的资源。

TL;DR - 如果我运行 Traceview,并且如果我发现最重要的资源都是系统方法,这是否意味着这是一个布局问题?或者,我还能怎么说为什么系统方法如此之高,因为它与我的自定义方法没有直接关系。

非常感谢,瑞安

最佳答案

I find Traceview can be boiled down into a couple simple concepts:

恕我直言,这些概念并不是最好的。

Sort by "EXCL CPU TIME" to determine exactly how much usage each individual method is using in isolation

特别是,恕我直言,这个概念相当糟糕。是的,这是有用的数据。但是,您随后需要备份调用堆栈 以尝试找出触发此事件的原因。有时,它直接是您的代码。有时,您会认识到它是框架的一部分(例如,ViewonDraw())。仅仅知道某个随机方法会占用大量时间对您没有好处,直到您首先确定是什么触发该方法被调用。

If I run a Traceview, and if I find the top hogs of resources are all system methods, does this mean it's a layout issue?

没有。

Or, how else can I tell why the system method is so high as it doesn't relate directly to my custom methods.

沿着调用堆栈向上查找,找出是谁如此频繁地或在不合时宜的时候调用这些方法。

例如,在 BitmapFactory 示例中,您可能会发现您(或您正在使用的库)正在调用 BitmapFactory,并且可能正在这样做主应用程序线程。

要在调用堆栈中向上移动,请单击代表某个感兴趣方法的行左边缘的三角形。然后您将在其下方看到两个分支:“Parents”和“Children”。 “父级”代表方法调用堆栈的下一层,您可以继续沿着父级链向上工作,直到找到您认识的东西。

这就是为什么,恕我直言,您最好按包含时间排序,因为您的代码(它直接是罪魁祸首)将趋于向顶部冒泡。

关于Android Traceview - 它包含我的无响应应用程序的答案......我认为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17012222/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com