2

我们希望有一个系统,其中有多种类型的跟踪(在 中声明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对象。

有没有办法在不调用方法的情况下将它们从 Firebase 性能跟踪列表中删除Trace.stop()

4

1 回答 1

2

只需清除对 Trace 对象的所有引用并让它进行垃圾收集。无论如何,在您调用 stop() 之前, Trace 并没有真正做任何事情。

于 2018-02-15T14:44:16.500 回答