【问题标题】:Flutter: Print to console from Dart isolates?Flutter:从 Dart 隔离打印到控制台?
【发布时间】:2021-06-27 14:07:52
【问题描述】:

无法在线查找有关此内容的信息。我只是想弄清楚 Dart 隔离中的特定功能是否正在运行。我知道如何做到这一点的唯一方法是使用print() 函数,但是我的函数没有运行,或者来自隔离的print()s 不会使用flutter run 显示在控制台中。我什至不知道是哪种情况。

这是我试图验证正在运行的代码,即onStart 函数:

void _entrypoint() => AudioServiceBackground.run(() => AudioPlayerTask());

class AudioPlayerTask extends BackgroundAudioTask {
  
  onStart(Map<String, dynamic> params) async {
    print('*** HELLO ***');
  }
}

这是调用代码,来自 Flutter 应用的状态:

  initAudio() async {
    // Not sure if this is necessary, but according to some, it is.
    await AudioService.connect();

    // This should run the `onStart` function above.
    await AudioService.start(backgroundTaskEntrypoint: _entrypoint);

    print('*** THIS IS RUNNING ***');
  }

  @override
  void initState() {
    super.initState();

    initAudio();
  }

initAudio() 确实正在运行,正如其中的 print() 语句所证明的那样。

所以问题是:我可以从 Dart 隔离中print(),如果不能,我怎样才能使隔离以某种方式表明它正在运行?

所有这些只是为了尝试让 Flutter 包 audio_service 正常工作(特别是 0.16.2 版)。我一直被困在这一点上,只是想知道onStart 是否正在运行。据我所知,它没有运行,但我没有办法证明它。

(奖励问题:如果它没有正在运行,我想知道为什么不运行。但这使得问题audio_service-specific,这可能值得一个单独的问题。我已经在使用doing home: AudioServiceWidget(child:..._entrypoint 是顶级的。)

【问题讨论】:

  • 非常确定来自隔离的标准输出将与主要隔离相同。你可以很容易地制作一个小示例程序来检查。
  • 非常确定 Isolates 除了端口之外没有其他接口,否则它们会弄乱 UI Isolate 对这些接口的访问。
  • 尝试检查flutter logs的打印件

标签: flutter dart dart-isolates


【解决方案1】:

我已经让一个隔离工作,答案是,打印的字符串应该在隔离内可见,至少在调试模式下。

【讨论】:

    【解决方案2】:

    是的,隔离打印在日志上可见。在某些情况下,例如使用 Logger 包时,您可以将消息从隔离区发送到主线程并在那里调用记录器。

    查看 easy_isolate 插件,它提供了一种使用隔离和解释清楚的文档的简单方法

    https://pub.dev/packages/easy_isolate

    【讨论】:

      猜你喜欢
      • 2014-01-28
      • 2021-05-18
      • 2018-12-15
      • 1970-01-01
      • 2016-09-21
      • 1970-01-01
      • 2012-06-06
      • 1970-01-01
      • 2021-09-27
      相关资源
      最近更新 更多