如果你运行一个用 Flutter 制作的应用程序并进入主屏幕一段时间,会不断出现以下消息

Posted

技术标签:

【中文标题】如果你运行一个用 Flutter 制作的应用程序并进入主屏幕一段时间,会不断出现以下消息【英文标题】:If you run an app made with Flutter and go to the home screen for a while, the following message appears continuously 【发布时间】:2021-11-20 15:10:07 【问题描述】:

我很害怕。这是一个错误吗?如果您运行它并转到主屏幕,则此消息会不断出现。 返回应用程序也是如此。

以下是我的部分代码。

此页面支持 YouTube 视频和相机功能。

List<CameraDescription> cameras = List.empty(growable: true); 

class Home extends StatefulWidget 
  @override
  const Home(Key? key) : super(key: key);
  _Home createState() => _Home();


class _Home extends State<Home>
  CameraController controller =
  CameraController(cameras[1], ResolutionPreset.max);
  //final VideoHomeController controller= Get.put(VideoHomeController());
  late final YoutubePlayerController _controller;

  @override
  void initState() 
    super.initState();
    controller.initialize().then((_) 
      if (!mounted) 
        return;
      
      setState(() );
    );
    _controller = YoutubePlayerController(
      initialVideoId: '',
      flags: YoutubePlayerFlags(
        autoPlay: false,
        loop: false,
        hideThumbnail: false,
        //isLive: true,

        controlsVisibleAtStart: false,

        useHybridComposition: false,
      ),
    );

  


  @override

  @override
  void dispose() 
    _controller.pause();
    controller.dispose();
    super.dispose();
  


  @override
  Widget build(BuildContext context)

    //Get.find<YoutubeDetailController>();
    var height2 = AppBar().preferredSize.height;
    if (!controller.value.isInitialized) 
      return Container();
    

    return SafeArea(

...

  body: Stack(

            children: [
              CameraPreview(controller),
              //상단 슬라이드
          Column(
...

这是控制台中的日志

W/MessageQueue(20594):  at android.os.Handler.sendMessageDelayed(Handler.java:697)
W/MessageQueue(20594):  at android.os.Handler.post(Handler.java:427)
W/MessageQueue(20594):  at android.hardware.camera2.impl.CameraDeviceImpl$CameraHandlerExecutor.execute(CameraDeviceImpl.java:2163)
W/MessageQueue(20594):  at android.hardware.camera2.impl.CameraDeviceImpl$CameraDeviceCallbacks.onResultReceived(CameraDeviceImpl.java:2071)
W/MessageQueue(20594):  at android.hardware.camera2.ICameraDeviceCallbacks$Stub.onTransact(ICameraDeviceCallbacks.java:182)
W/MessageQueue(20594):  at android.os.Binder.execTransactInternal(Binder.java:1195)
W/MessageQueue(20594):  at android.os.Binder.execTransact(Binder.java:1159)
W/MessageQueue(20594): Handler (android.os.Handler) 277b89c sending message to a Handler on a dead thread
W/MessageQueue(20594): java.lang.IllegalStateException: Handler (android.os.Handler) 277b89c sending message to a Handler on a dead thread

【问题讨论】:

【参考方案1】:

首先,当应用程序不在前台时处理你的相机,并在它再次进入前台时重新创建相机的东西。 (您可以使用this 来检测)由于该错误似乎是由于应用程序在后台时与相机相关的活动引起的。

其次,如果您对警告感到好奇,可能是由以下原因引起的:

主要原因是您将消息放在没有循环器循环的队列中。 ref

如果您没有安卓背景并且不了解什么是 Looper,请不要担心 ;) 无论如何,这听起来不是一个大问题,即应用程序不会崩溃。但是我怀疑是否会出现内存泄漏或CPU浪费等。无论如何,按照上面的“第一”部分,你应该不会再看到警告了。

【讨论】:

【参考方案2】:

你用的是什么版本的相机包?

这个特定问题在过去一年中出现了好几次,并且基于 GitHub 问题和 PR 已经有几个针对它的补丁。因此,考虑到这一点,我首先将相机依赖项更新到最新版本,然后重新测试。

我能找到的最新问题是 2021 年 11 月 18 日,原记者升级相机依赖后问题得到解决:https://github.com/flutter/flutter/issues/93888

我建议您在关注 @ch271828n suggestion 之前对此进行测试的原因是,从技术上讲,这应该由程序包本身处理,如果他们已修补此问题,那么您可以避免编写样板代码。

顺便说一句,查看插件最近的更新日志,他们已经两次修补了这个错误:

Flutter Camera Package Changelog: v0.9.4+5

Flutter Camera Package Changelog: 0.9.4+1

【讨论】:

【参考方案3】:
 @override
  void dispose() 
    _controller.pause();
    controller.dispose();
    super.dispose();
  

将其更改为 ->

  @override
  void dispose() 
    _controller.dispose();
    controller.dispose();
    super.dispose();
  

您的问题将得到解决

【讨论】:

【参考方案4】:

将 _controller.pause() 替换为 _controller.dispose

【讨论】:

这没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方留下评论。 - From Review

以上是关于如果你运行一个用 Flutter 制作的应用程序并进入主屏幕一段时间,会不断出现以下消息的主要内容,如果未能解决你的问题,请参考以下文章

如何制作像生物编辑器一样的 Tinder - Flutter

动手编写你的第一个 Flutter 应用

由于不可重现的错误,使用 Flutter 制作的 iOS 应用程序被拒绝

flutter 基于pageview 制作上下轮播文字功能

Flutter - 如果 Text() 太长,则让其滑动

Flutter 可以在 kiosk 模式下制作 Application 吗? [关闭]