Dart Stream。定期内存泄漏

问题描述 投票:0回答:1

我有以下代码

import 'dart:async';
import 'dart:html';

import 'package:angular/angular.dart';

@Component(
  selector: 'my-screen',
  directives: [coreDirectives, ],
  templateUrl: 'my_component.html',
)
class MyComponent implements OnInit, OnDestroy {

  Stream periodicStream;
  StreamSubscription periodicSubs;
  MyBloc myBloc;

  myComponent(this.myBloc) : super() {
    myBloc.listen((newState){
      if (newState is SomeBlocState) {
        periodicStream = new Stream.periodic(new Duration(seconds: 1));
        periodicSubs = periodicStream.listen(this.onTick);
      }
    });
  }

  void onTick(dynamic) {
    print('onTick');
  }

  @override
  void ngOnInit() {
  }

  @override
  void ngOnDestroy() {
    print('ngOnDestroy');
    if (periodicSubs != null) {
      print('periodicSubs.cancel()');
      periodicSubs.cancel();
      periodicSubs = null;
      periodicStream = null;
    }
  }
}

主要问题是:

1)首次创建组件时,一切似乎都正常,我收到了控制台“ onTick”消息,并且在销毁组件(调用ngOnDestroy)后,该消息也消失了

2),但是当第二次创建组件(依此类推)并再次初始化定期流时,我最终得到了两次“ onTick”控制台日志消息,这似乎是先前的流仍然有效]

什么会引起这种行为?

我有以下代码导入'dart:async';导入'dart:html';导入'package:angular / angular.dart'; @Component(选择器:“我的屏幕”,指令:[coreDirectives,],templateUrl:“ ...”>

memory-leaks stream lifecycle angular-dart
1个回答
0
投票

问题在BLoC监听回调调用中。当组件尝试监听BLoC秒时间时,将立即调用回调以报告当前状态。

© www.soinside.com 2019 - 2024. All rights reserved.