如何删除以FirebasePerformance开头的跟踪

时间:2018-02-15 09:17:58

标签: android performance firebase memory-leaks firebase-performance

我们希望有一个系统,其中有几种类型的跟踪(在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效果跟踪列表中删除它们?

1 个答案:

答案 0 :(得分:0)

只需清除对Trace对象的所有引用,然后让它进行垃圾回收。在你无论如何调用stop()之前,Trace都没有做任何事情。