优化工具 关注 Frames 行:正常绿色,丢帧黄色或红色 关注 Alerts 栏:自动分析性能问题的一些条目 ...

阅读全文 »

获取帧率

参考:android.view.ViewRootImpl#draw 里的 trackFPS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class FpsCounter {

private static final long MONITOR_INTERVAL = 160L; //单次计算FPS使用160毫秒
private static final long MONITOR_INTERVAL_NANOS = MONITOR_INTERVAL * 1000L * 1000L;
private static final long MAX_INTERVAL = 1000L; //设置计算fps的单位时间间隔1000ms,即fps/s;

private long mStartFrameTime = 0;
private int mFrameCount = 0;

private void getFPS() {
Choreographer.getInstance().postFrameCallback(new Choreographer.FrameCallback() {
@Override
public void doFrame(long frameTimeNanos) {
if (mStartFrameTime == 0) {
mStartFrameTime = frameTimeNanos;
}
long interval = frameTimeNanos - mStartFrameTime;
if (interval > MONITOR_INTERVAL_NANOS) {
double fps = (((double) (mFrameCount * 1000L * 1000L)) / interval) * MAX_INTERVAL;
mFrameCount = 0;
mStartFrameTime = 0;
} else {
++mFrameCount;
}

Choreographer.getInstance().postFrameCallback(this);
}
});
}
}
阅读全文 »

内存优化 意义:减少因为频繁GC导致的卡顿,减少因为内存占用应用存活率降低 内存问题 内存抖动:表现为内存锯齿状,频繁GC,导致卡顿 内存泄露:可用内存减少,频繁GC 内存溢出:OOM、程序异常 ...

阅读全文 »

如何初始化 通过ContentProvider自动初始化并注册相应的默认监控类型 默认的监控类型有: 1. Activity:在onDestory时观察 2. Fragment:在onViewDestory时观察内部View,在onDestory时观察Fragment 3. RootView:在Detached时观察 4. Service:在onDestory时观察 ...

阅读全文 »

俗称MAT,强大的 Java Heap 分析工具,较于 Memory Profiler 更适合查找内存泄漏及内存占用 建议线下深入使用 ...

阅读全文 »

实时图表展示应用内存使用量,可以很直观的识别出内存抖动 提供捕获堆存储、强制GC以及跟踪内存分配的能力 ...

阅读全文 »

相关任务: 冷启动之前 1. 启动`app` 2. 加载空白`Window` 3. 创建进程 随后任务 1. 创建`Application` 2. 创建主线程 3. 创建`MainActivity` 绘制任务 1. 加载布局 2. 布置屏幕 3. 首帧绘制 ...

阅读全文 »