Flutter如何有效地退出程序
今天博主来谈一个开发Flutter App的小技巧——怎样有效地退出程序。
这种方法典型的应用场景就是用户许可协议的同意与否。从用户的角度讲,虽然大部分人都会无脑点击“同意”,但我们仍不应忽视“不同意”的作用——退出App。
笔者在网络上搜索了一下相关的API,发现大部分的文章都在推荐一种方法,即:
SystemNavigator.pop();
但该方法在iOS中并不适用。
实际上,这种方法将会通知原生代码,请求原生代码退出App。换句话说,如果在原生层面并没有退出App的操作,就会报错。报错的示例如下:
android.view.WindowLeaked: Activity com.test.MainActivity has leaked window DecorView@855ee8b[] that was originally added here
E/WindowManager( 7144): at android.view.ViewRootImpl.(ViewRootImpl.java:558)
E/WindowManager( 7144): at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:331)
E/WindowManager( 7144): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:97)
E/WindowManager( 7144): at android.app.Dialog.show(Dialog.java:538)
E/WindowManager( 7144): at android.app.Presentation.show(Presentation.java:252)
E/WindowManager( 7144): at io.flutter.plugin.platform.VirtualDisplayController.(VirtualDisplayController.java:93)
E/WindowManager( 7144): at io.flutter.plugin.platform.VirtualDisplayController.create(VirtualDisplayController.java:53)
E/WindowManager( 7144): at io.flutter.plugin.platform.PlatformViewsController$1.createPlatformView(PlatformViewsController.java:105)
E/WindowManager( 7144): at io.flutter.embedding.engine.systemchannels.PlatformViewsChannel$1.create(PlatformViewsChannel.java:96)
E/WindowManager( 7144): at io.flutter.embedding.engine.systemchannels.PlatformViewsChannel$1.onMethodCall(PlatformViewsChannel.java:60)
好在默认情形下,原生层面已经做好了退出App的逻辑。
另一方面,根据iOS App的官方设计指导,App并不能自己结束自己,因此该方法并不适用iOS。
如果我们确实有退出程序的需求呢?
解决方法其实很简单,只要执行:
exit(0);
即可。
但是,直接调用exit()方法将会导致Dart虚拟机立即终止运行。其结果将导致:任何未终止的异步线程将会立即停止,Android平台原生的退出逻辑也会被跳过。
但是,如果没有这些顾虑,完全可以使用这种方式,它对Android和iOS平台都是有效的。
Flutter如何有效地退出程序的更多相关文章
- Flutter学习笔记(26)--返回拦截WillPopScope,实现1秒内点击两次返回按钮退出程序
如需转载,请注明出处:Flutter学习笔记(26)--返回拦截WillPopScope,实现1秒内点击两次返回按钮退出程序 在实际开发中,为了防止用户误触返回按钮导致程序退出,通常会设置为在1秒内连 ...
- flutter 返回键监听
本篇为继上片监听返回键基础下优化: 以下做返回键监听两种情况: import 'package:fluttertoast/fluttertoast.dart'; //提示第三方插件 1. 单击提示双击 ...
- flutter 监听返回键
### 监听手机返回键(双击退出) ``` import 'package:fluttertoast/fluttertoast.dart'; //提示插件 class WillPopScopeTest ...
- Flutter路由导航Navigator
第一点:push使用 1.pushNamed——Navigator.of(context).pushNamed('routeName'); 此种方法只是简单的将我们需要进入的页面push到栈顶,以此来 ...
- Flutter学习一
包管理 依赖本地包 dependencies: pkg1: path: ../../code/pkg1 依赖git包 dependencies: pkg1: git: url: git://githu ...
- flutter捕获应用退出弹出对话框
使用WillPopScope组件,它会检测到子组件的Navigation的pop事件,并拦截下来.我们需要在它的onWillPop属性中返回一个新的组件(一般是一个Dialog)处理是否真的pop该页 ...
- 青峰Flutter视频播放软件
下载地址: https://github.com/patton88/peak_flutter_player/raw/master/peak_flutter_player_v1.1.5_release0 ...
- Android 双击 Back 键退出程序
双击退出程序的原理无非就是设置一个退出标识(询问是否退出),如果改变了这个标识(确认退出),则再次点击时立马退出,如果短时间内没有退出,则延时重置这个标识(不退出). ================ ...
- C# 退出程序
1.this.Close(); 只是关闭当前窗口,若不是主窗体的话,是无法退出程序的,另外若有托管线程(非主线程),也无法干净地退出: 2.Application.Exit(); 强制所有消息中 ...
- android 双击返回按钮退出程序。
重写 onKeyDown()方法. @Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == K ...
随机推荐
- 2023-11-08:用go语言,字符串哈希原理和实现 比如p = 233, 也就是课上说的选择的质数进制 “ 3 1 2 5 6 ...“ 0 1 2 3 4 hash[0] = 3 * p的0
2023-11-08:用go语言,字符串哈希原理和实现 比如p = 233, 也就是课上说的选择的质数进制 " 3 1 2 5 6 ..." 0 1 2 3 4 hash[0] = ...
- Android app的暗黑模式适配实现
原文地址: Android app的暗黑模式适配实现 - Stars-One的杂货小窝 很久之前放在草稿箱的一篇简单笔记,是之前蓝奏云批量下载工具Android版本实现暗黑主题的适配记录 本文所说的这 ...
- 线上ES集群参数配置引起的业务异常案例分析
作者:vivo 互联网数据库团队- Liu Huang 本文介绍了一次排查Elasticsearch node_concurrent_recoveries 引发的性能问题的过程. 一.故障描述 1.1 ...
- Kubernetes 中的服务注册与发现原理分析
公众号「架构成长指南」,专注于生产实践.云原生.分布式系统.大数据技术分享. 对k8s有点了解技术人员,应该都只知道k8s是有服务注册发现的,今天就分析下这个原理,看看怎么实现的. 什么是服务注册与发 ...
- 制作交互式页面动画 | animate+javaweb
目前是做得这样的作业,有想法改一改.
- 【外包杯】【报错】(表面解决实际未解决)微信小程序报错:[渲染层错误] TypeError: Cannot read property ‘$$‘ of undefined
半解不解吧,反正实现了就行 渲染层出错,滑动图片组件无法显示,(swiper是轮播图插件,因此错误应该出现在swiper渲染中) 可以这样移动,但是没有图片 我觉得是路径的问题 兄弟们,目前没有解决接 ...
- ABAP 自定义附件
SWO1 关键字 *------------------------------------------------------------* REPORT ZTEST_CSW1. *TABLES ...
- chrome浏览器出现《您的连接不是私密链接》
问题现象 键盘切换到英文输入 点击页面,就页面中间随意点一下即可 不是输入框!不是输入框!不是输入框! 不是找啦!不是找啦!不是找啦! 在chrome该页面上,直接键盘敲入这11个字符:thisisu ...
- 51Nod 1085 01背包
01背包入门题,刚学完当写模板. 在N件物品取出若干件放在容量为W的背包里,每件物品的体积为W1,W2--Wn(Wi为整数),与之相对应的价值为P1,P2--Pn(Pi为整数).求背包能够容纳的最大价 ...
- 文心一言 VS 讯飞星火 VS chatgpt (168)-- 算法导论13.2 1题
一.用go语言,写出 RIGHT-ROTATE 的伪代码. 文心一言: 在计算机科学中,右旋转(RIGHT-ROTATE)是一种常见的操作,通常用于数组或链表.以下是一个使用Go语言实现右旋转的伪代码 ...