zoukankan      html  css  js  c++  java
  • 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平台都是有效的。

  • 相关阅读:
    Java中如何利用File类递归的遍历指定目录中的所有文件和文件夹
    SQL的别名和SQL的执行顺序和SQL优化
    Linux中如何配置sudo用户
    Linux的ssh的known_host文件
    Linux的SSH服务
    Linux的图形模式和文本模式以及单用户模式切换
    Linux服务器磁盘空间占满问题
    PLSQL Developer连接本地Oracle 11g数据库
    Linux常用命令学习
    OAuth2 .net MVC实现获取token
  • 原文地址:https://www.cnblogs.com/wenhanxiao/p/13534197.html
Copyright © 2011-2022 走看看