【发布时间】:2018-07-25 23:54:09
【问题描述】:
我们希望有一个系统,其中有多种类型的跟踪(在enum 中声明),并且我们假设每种类型的跟踪在所有跟踪的生命周期中都是这种类型的一种。我们使用这样的东西:
public class FirebasePerfAnalytics {
private ConcurrentHashMap<TraceType, Trace> traces = new ConcurrentHashMap<>();
public Trace startTrace(TraceType traceType) {
Trace trace = traces.get(traceType);
if (trace == null) {
trace = FirebasePerformance.getInstance().newTrace(traceType.name());
Trace oldTrace = traces.put(traceType, trace);
if (oldTrace == null) {
trace.start();
}
}
return trace;
}
public void stopTrace(TraceType traceType) {
Trace trace = traces.remove(traceType);
if (trace != null) {
trace.stop();
}
}
public enum TraceType {
// some types
}
}
在某些情况下,跟踪会打开但永远不会关闭(因为我们要测试的实际任务没有正确完成)。我们不想跟踪此类错误案例,但我们不想泄露这些小的 Trace 对象。
有没有办法在不调用 Trace.stop() 方法的情况下从 Firebase 性能跟踪列表中删除它们?
【问题讨论】:
标签: android performance firebase memory-leaks firebase-performance