今天博主來談一個開發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平臺都是有效的,
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/106747.html
標籤:其他
上一篇:海豚星空掃碼投屏 Android 接收端 SDK 集成 六步驟
下一篇:Sagit.Framework For IOS 開發框架入門教程14:STLocation 獲取GPS坐標資訊、跳轉第三方地圖
