如何删除使用 FirebasePerformance 启动的跟踪
How to remove trace started with FirebasePerformance
我们想要一个系统,其中有多种类型的跟踪(在 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 性能跟踪列表中删除?
只需清除对 Trace 对象的所有引用并让它进行垃圾回收。无论如何,在您调用 stop() 之前,Trace 不会真正执行任何操作。
我们想要一个系统,其中有多种类型的跟踪(在 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 性能跟踪列表中删除?
只需清除对 Trace 对象的所有引用并让它进行垃圾回收。无论如何,在您调用 stop() 之前,Trace 不会真正执行任何操作。