Flutter-Android開發(fā)者文檔 -Activity和Fragment

喜歡我的小伙伴,一定要關(guān)注我的微信公眾號?。。?!謝謝啦
AllAboutCoding


AllAboutCoding

此文章為翻譯Flutter官網(wǎng)的Flutter for Android Developers - Activities and fragments有興趣的小伙伴可以移步官網(wǎng)查看。

注意:在Flutter應(yīng)用中,你永遠不會希望Android重啟Activity,特別是因為這樣直接反對Android文檔的建議。例如,如果支持分屏,你需要添加** screenLayout**,還可能需要密度(density)。

Flutter中的Activity和Fragment是什么?

在Android中,Activity代表著用戶可以做的集中的事情。Fragment代表用戶的一種行為或用戶的一部分交互。Fragment是一種將你的代碼模塊化的方法,通過結(jié)合用戶的在大屏上的復(fù)雜交互,幫助擴展應(yīng)用的UI。在Flutter中,這兩個概念都在Widget的保護傘之下。
就像Intent那節(jié)提到的一樣,因為在Flutter中一切都是Widget,所以Widget就代表著屏幕(screens)。你可以使用Navigator在兩個不同的Route之間跳轉(zhuǎn),Route代表了不同的頁面或是屏幕,或者可能只是不同的狀態(tài)或相同的數(shù)據(jù)渲染。

如何監(jiān)聽Android Activity 生命周期事件?

在Android中,你可以重寫Activity的方法或者在Application中注冊ActivityLifecycleCallbacks來捕獲Activity的生命周期。在Flutter中,你沒有這些概念,但是你可以通過掛載WidgetsBinding觀察監(jiān)聽didChangeAppLifecycleState()*方法的改變事件來達到監(jiān)聽生命周期事件的目的。
可觀察的生命周期事件有:

  • inactive ——應(yīng)用已在活躍狀態(tài),并且還沒有收到用戶操作。因為在Android上沒有等價的映射,所以這個事件僅僅在iOS上有效。
  • paused——應(yīng)用對用戶已不可見,用戶操作已無效,并且在后臺運行。等價于Android的onPause()方法。
  • resume——應(yīng)用已顯示并且已經(jīng)可以響應(yīng)用戶的操作。等價于Android的onPostResume ()方法。
  • suspending——應(yīng)用暫時處于暫停狀態(tài)。這等價于Android的onStop;因為在iOS上沒有等價的方法,所以這個方法不會在iOS上觸發(fā)。

關(guān)于這些狀態(tài)的更多詳細解釋,請看生命周期狀態(tài)文檔
你可能注意到,只有一小部分Activity生命周期事件有效;而FlutterActivity確實捕獲了Activity的所有生命周期事件并將它們發(fā)送給Flutter引擎,它們絕大多數(shù)都被屏蔽了。Flutter關(guān)注的是給你starting和stopping引擎,在大多數(shù)情況下,F(xiàn)lutter并不是特別需要觀察Activity的生命周期。如果你無論如何都需要觀察生命周期來獲取或者釋放Native資源,那你可能需要在Native端做這件事。
這有一個如何監(jiān)聽Activity的生命周期的狀態(tài)的例子:

import 'package:flutter/widgets.dart';

class LifecycleWatcher extends StatefulWidget {
  @override
  _LifecycleWatcherState createState() => new _LifecycleWatcherState();
}

class _LifecycleWatcherState extends State<LifecycleWatcher> with WidgetsBindingObserver {
  AppLifecycleState _lastLifecyleState;

  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addObserver(this);
  }

  @override
  void dispose() {
    WidgetsBinding.instance.removeObserver(this);
    super.dispose();
  }

  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    setState(() {
      _lastLifecyleState = state;
    });
  }

  @override
  Widget build(BuildContext context) {
    if (_lastLifecyleState == null)
      return new Text('This widget has not observed any lifecycle changes.', textDirection: TextDirection.ltr);

    return new Text('The most recent lifecycle state this widget observed was: $_lastLifecyleState.',
        textDirection: TextDirection.ltr);
  }
}

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

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

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