我们希望有一个系统,其中有几种类型的跟踪(在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效果跟踪列表中删除它们?
答案 0 :(得分:0)
只需清除对Trace对象的所有引用,然后让它进行垃圾回收。在你无论如何调用stop()之前,Trace都没有做任何事情。