如果你运行一个用 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