回到前臺(tái)黑屏引發(fā)對(duì)Flutter項(xiàng)目生命周期與安卓原生生命周期的思考

起因:

目前我們是flutter項(xiàng)目,有個(gè)需求是需要在app內(nèi)引導(dǎo)用戶去appStore或是安卓的應(yīng)用商店去評(píng)價(jià),該需求我選用了兩個(gè)插件in_app_reviewlaunch_review, 然而仔做的過程中發(fā)現(xiàn)一個(gè)問題,當(dāng)彈出系統(tǒng)的跳轉(zhuǎn)應(yīng)用商店的彈框時(shí),iOS是單一彈框,Android是彈出一個(gè)選擇打開商店的彈窗,可選擇打開一次或是始終選擇某一個(gè)商店打開,此時(shí)鎖屏,然后再解鎖,發(fā)現(xiàn)iOS沒啥問題,安卓系統(tǒng)彈框后的flutter頁面黑屏了

原因:

看到這個(gè)現(xiàn)象,目測(cè)是由于安卓的生命周期和flutter的生命周期沒有同步,以下是驗(yàn)證過程
安卓的MainActivity添加生命周期方法


override fun onStart() {
        super.onStart()
        println("kotlin 收到了消息1onStart")
       // flutterEngine!!.lifecycleChannel.appIsResumed()
    }

    override fun onStop() {
        super.onStop()
        println("kotlin 收到了消息1onStop")
    }

    override fun onPause() {
        super.onPause()
        println("kotlin 收到了消息1onPause")
    }

flutter 添加生命周期方法


@override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    super.didChangeAppLifecycleState(state);

    print("-didChangeAppLifecycleState-" + state.toString());
    switch (state) {
      case AppLifecycleState.inactive: // 處于這種狀態(tài)的應(yīng)用程序應(yīng)該假    設(shè)它們可能在任何時(shí)候暫停。

        print('這是冷啟動(dòng)');

        break;
      case AppLifecycleState.resumed: //從后臺(tái)切換前臺(tái),界面可見
        
        print('這是resumed');
        break;
      case AppLifecycleState.paused: // 界面不可見,后臺(tái)
        print('這是paused');
        break;
      case AppLifecycleState.detached: // APP結(jié)束時(shí)調(diào)用
        break;
    }
  }

還是剛才的場(chǎng)景 鎖屏 安卓和flutter的后臺(tái)方法都調(diào)用,解鎖回到前臺(tái) 只有安卓的前臺(tái)方法走 MainActivity會(huì)restart,flutter的resume方法,沒有調(diào)用,驗(yàn)證了開始的猜想,是由于flutter沒有檢測(cè)到前臺(tái)操作或是這種情況flutter不認(rèn)為自己在前臺(tái),導(dǎo)致flutter沒有執(zhí)行頁面的重新繪制導(dǎo)致黑屏

解決:

關(guān)于flutter的生命周期,查閱資料發(fā)現(xiàn) 我們可以手動(dòng)刷新flutter頁面的狀態(tài),即使用

flutterEngine!!.lifecycleChannel.appIsResumed()

我們只需要在MainActivity restart的時(shí)候調(diào)用上述 方法 告知flutter重繪,該問題就解決了

關(guān)于原生加載flutter頁面 生命周期相關(guān) 看這里 能有一些啟發(fā)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容