运行我的应用程序会导致我的手机使用约 40% 的 CPU:
final String position = String.format("%02d:%02d:%02d", time.getHours(), time.getMinutes(),
time.getSeconds());
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
c.mTxtPosition.setText(position);
...
通过注释掉setText方法,CPU 使用率下降到预期的 ~4% 水平。该方法每秒调用一次,并且会刷新 ImageViews、CustomViews ...,而不会导致相同的负载过剩。除了 CPU 使用率之外,dalvik 仅通过调用setText()就不断报告大约 10-1000 个对象的垃圾收集。
像这样创建一个跟踪文件:
Debug.startMethodTracing("setText");
c.mTxtPosition.setText(position);
Debug.stopMethodTracing();
traceview 将以下方法按各自的独占 CPU% 列为 Top 5:
- ViewParent.invalidateChildInParent(16%)
- View.requestLayout(11%)
- ViewGroup.invalidateChild(9%)
- TextView.setText(7%)
- 顶层(6%)
有人对此有解释吗?