国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Flutter筆記:Flutter的應(yīng)用生命周期狀態(tài)(lifecycleState)管理

這篇具有很好參考價值的文章主要介紹了Flutter筆記:Flutter的應(yīng)用生命周期狀態(tài)(lifecycleState)管理。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Flutter筆記
Flutter的應(yīng)用生命周期狀態(tài)(lifecycleState)管理

作者李俊才 (jcLee95):https://blog.csdn.net/qq_28550263
郵箱 :291148484@163.com
本文地址:https://blog.csdn.net/qq_28550263/article/details/134127670


【介紹】:WidgetsBinding.instance 是Flutter中用于管理應(yīng)用程序事件和生命周期的重要工具,它允許開發(fā)者控制應(yīng)用程序的各個方面,以提供更好的用戶體驗。 WidgetsBinding.instance 上提供了一個 lifecycleState 屬性,可以用來獲取當(dāng)前應(yīng)用程序的生命周期狀態(tài)。
本文介紹 Flutter 應(yīng)用應(yīng)用程序的生命周期狀態(tài)(lifecycleState)及其用法。


1. 關(guān)于 WidgetsBinding

很多初學(xué)者是不會接觸和用到 WidgetsBinding.instance的,本文介紹的知識點是 WidgetsBinding.instance 的一個小部分。因此,先對 WidgetsBinding.instance 進(jìn)行大概的介紹。

WidgetsBinding.instance 是Flutter中的一個核心類的實例,用于管理應(yīng)用程序的事件循環(huán)和處理各種事件,例如布局、繪制、手勢和系統(tǒng)事件。它是 WidgetsBinding 類的一個單例實例,通過它可以訪問應(yīng)用程序的根 WidgetsBinding 對象。

WidgetsBinding 類是 Flutter 框架的一部分,它包含了以下常用的功能和應(yīng)用:

  1. 事件循環(huán)管理WidgetsBinding負(fù)責(zé)管理Flutter應(yīng)用程序的事件循環(huán),它處理了各種事件的分發(fā)和調(diào)度。這包括構(gòu)建(build)事件、布局(layout)事件、繪制(paint)事件等。

  2. 處理系統(tǒng)事件WidgetsBinding 可以處理系統(tǒng)級事件,例如按鍵事件、觸摸事件、指針事件等。它允許應(yīng)用程序響應(yīng)用戶的輸入和交互。

  3. 定時器和幀回調(diào)WidgetsBinding允許你注冊定時器和幀回調(diào),以便在未來的時間點執(zhí)行代碼或在下一幀繪制前執(zhí)行代碼。

  4. 狀態(tài)管理WidgetsBinding 管理應(yīng)用程序的生命周期狀態(tài),包括inactive、pausedresumeddetached狀態(tài)。這有助于應(yīng)用程序在不同狀態(tài)下進(jìn)行適當(dāng)?shù)奶幚怼?/p>

  5. 媒體和屏幕分辨率信息WidgetsBinding 提供了訪問媒體查詢(MediaQuery)和屏幕信息的方法,以便根據(jù)屏幕屬性調(diào)整UI。

  6. 錯誤處理WidgetsBinding 還處理了Flutter應(yīng)用程序中的異常和錯誤,允許你注冊全局錯誤處理程序。

  7. 根`BuildContextWidgetsBinding 提供了根 BuildContext,可以用于構(gòu)建全局部件。

WidgetsBinding 是整個 Flutter 應(yīng)用程序事件和生命周期管理的關(guān)鍵。開發(fā)者可以通過 WidgetsBinding.instance 來訪問它,并注冊事件回調(diào),以便在應(yīng)用程序的各個生命周期階段執(zhí)行自定義操作。例如,你可以使用 WidgetsBinding 來注冊全局的錯誤處理程序,管理應(yīng)用程序的生命周期狀態(tài),或執(zhí)行定時任務(wù)。

2. Flutter 應(yīng)用程序的生命周期狀態(tài)(lifecycleState)

WidgetsBinding.instance 提供了一個 lifecycleState 屬性,可以用來獲取當(dāng)前應(yīng)用程序的生命周期狀態(tài)。

WidgetsBinding.instancelifecycleState 屬性是一個非常有用的工具,用于獲取并監(jiān)測應(yīng)用程序的生命周期狀態(tài)。生命周期狀態(tài)表示應(yīng)用程序當(dāng)前處于哪種狀態(tài),如前臺活動、后臺、非活動等。在Flutter中,AppLifecycleState 枚舉提供了不同的生命周期狀態(tài),包括 resumed、inactive、pauseddetached

下面將詳細(xì)介紹 WidgetsBinding.instancelifecycleState 屬性,以及每個生命周期狀態(tài)的含義和示例用法

2.1 獲取當(dāng)前生命周期狀態(tài)

你可以通過 WidgetsBinding.instance.lifecycleState 來獲取當(dāng)前應(yīng)用程序的生命周期狀態(tài)。這個屬性返回一個 AppLifecycleState 枚舉值(請參考附錄《AppLifecycleState 枚舉源碼(帶中文注釋)》),表示應(yīng)用程序的狀態(tài)。以下是如何獲取當(dāng)前生命周期狀態(tài)的示例:

AppLifecycleState? currentLifecycleState = WidgetsBinding.instance.lifecycleState;
print("Current Lifecycle State: $currentLifecycleState");

2.2 AppLifecycleState.resumed(恢復(fù)狀態(tài))

2.2.1 含義描述

當(dāng)應(yīng)用程序處于 resumed 狀態(tài)時,它位于前臺并處于活動狀態(tài)。用戶可以與應(yīng)用程序進(jìn)行交互,應(yīng)用程序可見。

2.2.2 應(yīng)用舉例

可以在此狀態(tài)下執(zhí)行需要響應(yīng)用戶交互的操作,例如啟動定時器或更新UI等。

下面的代碼,我們將創(chuàng)建一個頁面,當(dāng)應(yīng)用恢復(fù)到前臺時,頁面的顏色會改變:

/// 一個用于監(jiān)聽?wèi)?yīng)用程序生命周期狀態(tài)并相應(yīng)地更新UI顏色的組件。
class LifecycleWatcher extends StatefulWidget {
  
  _LifecycleWatcherState createState() => _LifecycleWatcherState();
}

class _LifecycleWatcherState extends State<LifecycleWatcher> with WidgetsBindingObserver {
  Color _color = Colors.green;

  
  void initState() {
    super.initState();
    WidgetsBinding.instance.addObserver(this);
    
    // 當(dāng)組件初始化時,將自身添加為應(yīng)用生命周期狀態(tài)的觀察者。
  }

  
  void dispose() {
    WidgetsBinding.instance.removeObserver(this);
    super.dispose();
    
    // 在組件被銷毀時,確保將自身從應(yīng)用生命周期狀態(tài)的觀察者中移除,以防止內(nèi)存泄漏。
  }

  
  void didChangeAppLifecycleState(AppLifecycleState state) {
    if (state == AppLifecycleState.resumed) {
      // 當(dāng)應(yīng)用程序從后臺切換到前臺時,更新顏色為紅色。
      setState(() {
        _color = Colors.red;
      });
    } else {
      // 當(dāng)應(yīng)用程序不在前臺時,更新顏色為綠色。
      setState(() {
        _color = Colors.green;
      });
    }
  }

  
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        color: _color,
      ),
    );
  }
}

2.3 AppLifecycleState.inactive(非活動狀態(tài))

2.3.1 含義描述

當(dāng)應(yīng)用程序處于 inactive 狀態(tài)時,它仍然位于前臺,但不能響應(yīng)用戶交互。這可能發(fā)生在用戶從應(yīng)用程序切換到另一個應(yīng)用程序或系統(tǒng)對話框時。

2.3.2 應(yīng)用舉例

可以在此狀態(tài)下執(zhí)行一些暫停操作,例如停止定時器或保存應(yīng)用程序狀態(tài)。

下面的代碼展示了如何在應(yīng)用進(jìn)入非活動狀態(tài)時執(zhí)行特定的操作。

/// 一個用于監(jiān)視應(yīng)用程序生命周期狀態(tài)并更新計數(shù)器的組件。
class LifecycleWatcher extends StatefulWidget {
  
  _LifecycleWatcherState createState() => _LifecycleWatcherState();
}

class _LifecycleWatcherState extends State<LifecycleWatcher> with WidgetsBindingObserver {
  Timer _timer;  // 用于定時更新計數(shù)器的計時器
  int _counter = 0;  // 用于存儲計數(shù)器的當(dāng)前值

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

    // 在組件初始化時,將自身添加為應(yīng)用生命周期狀態(tài)的觀察者,并啟動計時器。
    _startTimer();
  }

  
  void dispose() {
    WidgetsBinding.instance.removeObserver(this);
    _timer?.cancel();
    super.dispose();

    // 在組件被銷毀時,確保將自身從應(yīng)用生命周期狀態(tài)的觀察者中移除,并取消計時器以避免內(nèi)存泄漏。
  }

  void _startTimer() {
    _timer = Timer.periodic(Duration(seconds: 1), (timer) {
      setState(() {
        _counter++;  // 每秒更新計數(shù)器的值
      });
    });
  }

  
  void didChangeAppLifecycleState(AppLifecycleState state) {
    if (state == AppLifecycleState.inactive) {
      _timer?.cancel();  // 當(dāng)應(yīng)用程序狀態(tài)變?yōu)椴换顒訒r,取消計時器以停止計數(shù)器的更新。
    } else if (state == AppLifecycleState.resumed) {
      _startTimer();  // 當(dāng)應(yīng)用程序狀態(tài)變?yōu)榛謴?fù)時,重新啟動計時器以繼續(xù)更新計數(shù)器。
    }
  }

  
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Text('Counter: $_counter'),  // 顯示計數(shù)器的當(dāng)前值
      ),
    );
  }
}

這個例子中,我們創(chuàng)建了一個 LifecycleWatcher 組件,它啟動了一個每秒遞增計數(shù)器的定時器。當(dāng)應(yīng)用進(jìn)入非活動狀態(tài)(AppLifecycleState.inactive)時,我們會停止定時器;當(dāng)應(yīng)用恢復(fù)到前臺(AppLifecycleState.resumed)時,我們會重新啟動定時器。

在實際的應(yīng)用中,你可能會在應(yīng)用進(jìn)入非活動狀態(tài)時執(zhí)行更復(fù)雜的操作,例如保存應(yīng)用程序狀態(tài)。

2.4 AppLifecycleState.paused(暫停狀態(tài))

2.4.1 含義描述

當(dāng)應(yīng)用程序處于 paused 狀態(tài)時,它被切換到后臺,不再可見。應(yīng)用程序可能會進(jìn)入暫停狀態(tài),例如在用戶按下Home按鈕時。

2.4.2 應(yīng)用舉例

AppLifecycleState.paused 表示應(yīng)用已被切換到后臺并且不再可見,例如用戶按下 Home 按鈕時。在這個狀態(tài)下,你可以執(zhí)行一些后臺操作,例如保存數(shù)據(jù)或關(guān)閉網(wǎng)絡(luò)連接。

下面的示例代碼中,我們創(chuàng)建一個頁面,當(dāng)應(yīng)用進(jìn)入暫停狀態(tài)時,保存一些數(shù)據(jù)。

/// 一個用于監(jiān)視應(yīng)用程序生命周期狀態(tài)并在應(yīng)用程序暫停時保存數(shù)據(jù)的組件。
class LifecycleWatcher extends StatefulWidget {
  
  _LifecycleWatcherState createState() => _LifecycleWatcherState();
}

class _LifecycleWatcherState extends State<LifecycleWatcher> with WidgetsBindingObserver {
  String _dataToSave = 'Some data'; // 用于保存的數(shù)據(jù)

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

    // 在組件初始化時,將自身添加為應(yīng)用生命周期狀態(tài)的觀察者。
  }

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

    // 在組件被銷毀時,確保將自身從應(yīng)用生命周期狀態(tài)的觀察者中移除。
  }

  Future<void> _saveData() async {
    // 模擬保存數(shù)據(jù)的操作,例如將數(shù)據(jù)寫入存儲或云端
    await Future.delayed(Duration(seconds: 2));
    print('Data saved: $_dataToSave'); // 打印保存的數(shù)據(jù)
  }

  
  void didChangeAppLifecycleState(AppLifecycleState state) {
    if (state == AppLifecycleState.paused) {
      // 當(dāng)應(yīng)用程序狀態(tài)變?yōu)闀和r,觸發(fā)數(shù)據(jù)保存操作。
      _saveData();
    }
  }

  
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Text('App lifecycle demo'), // 顯示應(yīng)用程序生命周期演示的文本
      ),
    );
  }
}

2.5 AppLifecycleState.detached(分離狀態(tài))

2.5.1 含義描述

這是應(yīng)用程序的初始狀態(tài),或者在應(yīng)用程序啟動之前的狀態(tài)。在此狀態(tài)下,應(yīng)用程序尚未啟動或已經(jīng)被銷毀。

2.5.2 應(yīng)用舉例

AppLifecycleState.detached 表示應(yīng)用程序尚未啟動或已經(jīng)被銷毀。在此狀態(tài)下通常不需要執(zhí)行特定的操作,因為應(yīng)用程序尚未啟動。你可以在應(yīng)用程序啟動時執(zhí)行初始化操作。

下面是一個具體的例子,我們創(chuàng)建一個頁面,當(dāng)應(yīng)用進(jìn)入分離狀態(tài)時,我們會打印一條消息:

/// 一個用于監(jiān)視應(yīng)用程序生命周期狀態(tài)并在應(yīng)用程序進(jìn)入“detached”狀態(tài)時進(jìn)行記錄的組件。
class LifecycleWatcher extends StatefulWidget {
  
  _LifecycleWatcherState createState() => _LifecycleWatcherState();
}

class _LifecycleWatcherState extends State<LifecycleWatcher> with WidgetsBindingObserver {
  
  void initState() {
    super.initState();
    WidgetsBinding.instance.addObserver(this);

    // 在組件初始化時,將自身添加為應(yīng)用生命周期狀態(tài)的觀察者。
  }

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

    // 在組件被銷毀時,確保將自身從應(yīng)用生命周期狀態(tài)的觀察者中移除。
  }

  
  void didChangeAppLifecycleState(AppLifecycleState state) {
    if (state == AppLifecycleState.detached) {
      // 當(dāng)應(yīng)用程序狀態(tài)變?yōu)椤癲etached”時,記錄應(yīng)用程序處于“detached”狀態(tài)。
      print('App is in detached state');
    }
  }

  
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Text('App lifecycle demo'), // 顯示應(yīng)用程序生命周期演示的文本
      ),
    );
  }
}

代碼中,我們創(chuàng)建了一個 LifecycleWatcher 組件,當(dāng)應(yīng)用進(jìn)入分離狀態(tài)(AppLifecycleState.detached)時,我們會打印一條消息。

在實際的應(yīng)用中,你可能會在應(yīng)用進(jìn)入分離狀態(tài)時執(zhí)行更復(fù)雜的操作,例如釋放資源或清理緩存。但需要指出的是,由于在分離狀態(tài)下,應(yīng)用程序可能已經(jīng)被銷毀,所以在這個狀態(tài)下執(zhí)行的操作應(yīng)該是非常有限的。

3. 監(jiān)聽生命周期狀態(tài)的變化

此外,可以添加一個 WidgetsBindingObserver 來監(jiān)聽生命周期狀態(tài)的變化。例如,可以在應(yīng)用程序進(jìn)入后臺時保存一些數(shù)據(jù),或者在應(yīng)用程序恢復(fù)到前臺時更新UI。

class MyObserver extends WidgetsBindingObserver {
  
  void didChangeAppLifecycleState(AppLifecycleState state) {
    if (state == AppLifecycleState.paused) {
      // App在后臺
      // ...
    } else if (state == AppLifecycleState.resumed) {
      // 應(yīng)用程序在前臺
      // ...
    }
  }
}

// Add the observer
WidgetsBinding.instance.addObserver(MyObserver());

下面是一個完整的示例,演示如何使用 WidgetsBinding.instance.lifecycleState 屬性和 WidgetsBindingObserver 來監(jiān)聽?wèi)?yīng)用程序的生命周期狀態(tài)變化:

import 'package:flutter/material.dart';

class MyObserver extends WidgetsBindingObserver {
  
  void didChangeAppLifecycleState(AppLifecycleState state) {
    if (state == AppLifecycleState.paused) {
      // 應(yīng)用程序進(jìn)入后臺
      print("App is in the background");
      // 在這里可以執(zhí)行保存數(shù)據(jù)、停止定時器等后臺操作
    } else if (state == AppLifecycleState.resumed) {
      // 應(yīng)用程序進(jìn)入前臺
      print("App is in the foreground");
      // 在這里可以執(zhí)行恢復(fù)UI、啟動定時器等前臺操作
    }
  }
}

class MyApp extends StatelessWidget {
  
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text("App Lifecycle Example"),
        ),
        body: Center(
          child: Text("Hello, Flutter!"),
        ),
      ),
    );
  }

  
  void didChangeDependencies() {
    super.didChangeDependencies();
    // 在這里添加觀察者,監(jiān)聽?wèi)?yīng)用程序生命周期變化
    WidgetsBinding.instance.addObserver(MyObserver());
  }
}

void main() {
  runApp(MyApp());
}

這個示例演示了如何使用 WidgetsBindingWidgetsBindingObserver 來監(jiān)聽?wèi)?yīng)用程序的生命周期狀態(tài)變化,并根據(jù)不同的狀態(tài)執(zhí)行相應(yīng)的操作。你可以根據(jù)應(yīng)用程序的需求在不同的生命周期狀態(tài)下執(zhí)行自定義操作。文章來源地址http://www.zghlxwxcb.cn/news/detail-737246.html


F. AppLifecycleState 枚舉源碼(帶中文注釋)

/// 表示應(yīng)用程序在運(yùn)行時可能存在的狀態(tài)。
///
/// 當(dāng)平臺不支持的狀態(tài)在支持的狀態(tài)之間轉(zhuǎn)換時,框架會合成這些狀態(tài),以使所有實現(xiàn)共享相同的狀態(tài)機(jī)。
///
/// 狀態(tài)的初始值為[detached]狀態(tài),一旦從平臺接收到第一個生命周期更新,通常會更新為[resumed]狀態(tài)。
///
/// 基于歷史和名稱沖突的原因,F(xiàn)lutter的應(yīng)用程序狀態(tài)名稱與所有平臺上的狀態(tài)名稱并不一一對應(yīng)。例如,在Android上,當(dāng)操作系統(tǒng)調(diào)用
/// [`Activity.onPause`](https://developer.android.com/reference/android/app/Activity#onPause()) 時,F(xiàn)lutter將進(jìn)入[inactive]
/// 狀態(tài),但當(dāng)Android調(diào)用
/// [`Activity.onStop`](https://developer.android.com/reference/android/app/Activity#onStop()) 時,F(xiàn)lutter將進(jìn)入[paused]狀態(tài)。
/// 請參閱各個狀態(tài)的文檔,了解它們在每個平臺上的含義。
///
/// 當(dāng)前應(yīng)用程序狀態(tài)可以從[SchedulerBinding.instance.lifecycleState]獲取,狀態(tài)的更改可以通過創(chuàng)建[AppLifecycleListener]來觀察,也可以通過
/// 使用[WidgetsBindingObserver]通過覆蓋[WidgetsBindingObserver.didChangeAppLifecycleState]方法來觀察。
///
/// 應(yīng)用程序不應(yīng)依賴于始終接收到所有可能的通知。
///
/// 例如,如果應(yīng)用程序使用任務(wù)管理器被終止,接收到終止信號,用戶斷開設(shè)備電源,或者設(shè)備發(fā)生快速的非計劃拆卸,那么在應(yīng)用程序突然終止之前將不會發(fā)送任何通知,某些狀態(tài)可能會被跳過。
///
/// 另請參閱:
///
/// * [AppLifecycleListener],用于觀察生命周期狀態(tài)變化的對象。
/// * [WidgetsBindingObserver],用于從小部件層觀察生命周期狀態(tài)的機(jī)制。
/// * iOS的[IOKit活動生命周期](https://developer.apple.com/documentation/uikit/app_and_environment/managing_your_app_s_life_cycle?language=objc)
///   文檔。
/// * Android的[活動生命周期](https://developer.android.com/guide/components/activities/activity-lifecycle)
///   文檔。
/// * macOS的[AppKit活動生命周期](https://developer.apple.com/documentation/appkit/nsapplicationdelegate?language=objc)
///   文檔。
enum AppLifecycleState {
  /// 應(yīng)用程序仍由Flutter引擎托管,但已分離,不附加到任何宿主視圖。
  ///
  /// 在初始化之前,應(yīng)用程序默認(rèn)處于此狀態(tài),并且可以在所有視圖都已分離后(僅限Android和iOS)處于此狀態(tài)。
  ///
  /// 當(dāng)應(yīng)用程序處于此狀態(tài)時,引擎正在運(yùn)行,但沒有視圖。
  ///
  /// 只有在iOS和Android上進(jìn)入此狀態(tài),盡管在所有平臺上在應(yīng)用程序開始運(yùn)行之前它是默認(rèn)狀態(tài)。
  detached,

  /// 在所有平臺上,此狀態(tài)表示應(yīng)用程序處于具有輸入焦點并可見的運(yùn)行應(yīng)用程序的默認(rèn)運(yùn)行模式。
  ///
  /// 在Android上,此狀態(tài)對應(yīng)于Flutter宿主視圖具有焦點([`Activity.onWindowFocusChanged`](https://developer.android.com/reference/android/app/Activity#onWindowFocusChanged(boolean)) 傳遞為true),
  /// 同時處于Android的"resumed"狀態(tài)。如果應(yīng)用程序失去焦點([`Activity.onWindowFocusChanged`](https://developer.android.com/reference/android/app/Activity#onWindowFocusChanged(boolean))
  /// 傳遞為false),但尚未調(diào)用[`Activity.onPause`](https://developer.android.com/reference/android/app/Activity#onPause()),則Flutter應(yīng)用程序可能處于[inactive]狀態(tài)。
  ///
  /// 在iOS和macOS上,這對應(yīng)于應(yīng)用程序在前臺活動狀態(tài)運(yùn)行。
  resumed,

  /// 應(yīng)用程序的至少一個視圖可見,但沒有輸入焦點。應(yīng)用程序在其他方面正常運(yùn)行。
  ///
  /// 在非Web桌面平臺上,這對應(yīng)于處于非前臺的應(yīng)用程序,但仍具有可見的窗口。
  ///
  /// 在Web上,這對應(yīng)于在沒有輸入焦點的窗口或選項卡中運(yùn)行的應(yīng)用程序。
  ///
  /// 在iOS和macOS上,此狀態(tài)對應(yīng)于在前臺不活動狀態(tài)運(yùn)行的Flutter宿主視圖。當(dāng)在通話時,響應(yīng)TouchID請求,進(jìn)入應(yīng)用程序切換器或控制中心,或UIViewController托管Flutter應(yīng)用程序正在過渡時,應(yīng)用程序會轉(zhuǎn)換到此狀態(tài)。
  ///
  /// 在Android上,這對應(yīng)于在Android的暫停狀態(tài)下運(yùn)行的Flutter宿主視圖(即已調(diào)用[`Activity.onPause`](https://developer.android.com/reference/android/app/Activity#onPause())),
  /// 或在Android的"resumed"狀態(tài)下運(yùn)行的Flutter宿主視圖,但沒有窗口焦點。應(yīng)用程序轉(zhuǎn)換到此狀態(tài)的示例包括應(yīng)用程序部分被遮擋,或者其他活動被關(guān)注,分屏上運(yùn)行的應(yīng)用程序不是當(dāng)前應(yīng)用程序,被電話呼叫中斷的應(yīng)用程序,畫中畫應(yīng)用程序,系統(tǒng)對話框,其他視圖。
  /// 當(dāng)通知窗口遮擋或應(yīng)用程序切換器可見時,它也將處于不活動狀態(tài)。
  ///
  /// 在Android和iOS上,處于此狀態(tài)的應(yīng)用程序應(yīng)該假定它們隨時可能被[hidden]和[paused]。
  inactive,

  /// 應(yīng)用程序的所有視圖都隱藏,這可能是因為應(yīng)用程序即將被暫停(在iOS和Android上),或者因為應(yīng)用程序已被最小化或放在不可見的桌面上(在非Web桌面上),
  /// 或者因為應(yīng)用程序在不可見的窗口或選項卡中運(yùn)行(在Web上)。
  ///
  /// 為了使所有平臺上的狀態(tài)機(jī)保持一致,當(dāng)從[inactive]狀態(tài)切換到[paused]狀態(tài)之前,合成了一個過渡狀態(tài),在從[paused]狀態(tài)切換到[inactive]狀態(tài)之前也是如此。這允許跨平臺實現(xiàn)只編寫一個處理程序,用于知道應(yīng)用程序何時在概念上是"隱藏"的。
  hidden,

  /// 應(yīng)用程序當(dāng)前不可見給用戶,并且不響應(yīng)用戶輸入。
  ///
  /// 當(dāng)應(yīng)用程序處于此狀態(tài)時,引擎不會調(diào)用[PlatformDispatcher.onBeginFrame]和[PlatformDispatcher.onDrawFrame]回調(diào)。
  ///
  /// 只有在iOS和Android上進(jìn)入此狀態(tài)。
  paused,
}

到了這里,關(guān)于Flutter筆記:Flutter的應(yīng)用生命周期狀態(tài)(lifecycleState)管理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Flutter生命周期小結(jié)

    Flutter生命周期小結(jié)

    Flutter 中的生命周期,包含以下幾個階段: createState ,在 StatefulWidget 中創(chuàng)建 State 的方法,當(dāng) StatefulWidget 調(diào)用時會觸發(fā) createState 。 initState ,在 State 初始化時調(diào)用,因此可以在此期間執(zhí)行 State 各變量的初始賦值,同時也可以在此期間與服務(wù)端交互,獲取服務(wù)端數(shù)據(jù)后調(diào)用

    2024年02月12日
    瀏覽(27)
  • Flutter Widget 生命周期 & key探究

    Flutter Widget 生命周期 & key探究

    在Flutter中,一切皆是Widget(組件),Widget的功能是“描述一個UI元素的配置數(shù)據(jù)”,它就是說,Widget其實并不是表示最終繪制在設(shè)備屏幕上的顯示元素,它只是描述顯示元素的一個配置數(shù)據(jù)。 實際上,F(xiàn)lutter中真正代表屏幕上顯示元素的類是 Element,也就是說Widget 只是描述

    2024年02月08日
    瀏覽(24)
  • MediaPlayer狀態(tài)圖及生命周期

    MediaPlayer狀態(tài)圖及生命周期

    MediaPlayer狀態(tài)圖及生命周期 MediaPlayer是Android中的uoge多媒體播放類,我們能通過它控制音視頻流或本地音視頻資源的播放過程。 這一片博客主要介紹MediaPlayer狀態(tài)圖及生命周期。先看一張官網(wǎng)很經(jīng)典的MediaPlayer狀態(tài)機(jī)的圖片。 其中橢圓代表MediaPlayer駐留狀態(tài),弧代表播放器控制

    2023年04月08日
    瀏覽(22)
  • K8s: 關(guān)于Kubernetes中的Pod的生命周期(狀態(tài))以及生命周期的鉤子函數(shù)處理

    pod 的生命周期 1 ) pod 幾種常用狀態(tài) 1.1 )Pending(掛起) Pod 已被 Kubernetes 系統(tǒng)接受,但有一個或者多個容器尚未創(chuàng)建亦未運(yùn)行 此階段包括等待 Pod 被調(diào)度的時間和通過網(wǎng)絡(luò)下載鏡像的時間。 1.2 )Running(運(yùn)行中) Pod 已經(jīng)綁定到了某個節(jié)點,Pod 中所有的容器都已被創(chuàng)建 至少有

    2024年04月22日
    瀏覽(40)
  • Flutter Widget Life Cycle 組件生命周期

    Flutter Widget Life Cycle 組件生命周期

    了解 widget 生命周期,對我們開發(fā)組件還是很重要的。 今天會把無狀態(tài)、有狀態(tài)組件的幾個生命周期函數(shù)一起過下。 原文 https://ducafecat.com/blog/flutter-widget-life-cycle https://api.flutter.dev/flutter/widgets/StatelessWidget-class.html https://api.flutter.dev/flutter/widgets/StatefulWidget-class.html 無狀態(tài)組件

    2024年02月15日
    瀏覽(28)
  • HarmonyOS Stage模型 UIAbility生命周期狀態(tài)

    HarmonyOS Stage模型 UIAbility生命周期狀態(tài)

    UIAbility的生命周期包括Create、Foreground、Background、Destroy四個狀態(tài) Create 狀態(tài),在UIAbility實例 創(chuàng)建 時觸發(fā),對應(yīng)onCreate回調(diào)??梢栽趏nCreate回調(diào)中進(jìn)行相關(guān)初始化操作 Foreground 狀態(tài),在UIAbility 切換至前臺 時觸發(fā)。對應(yīng)onForeground回調(diào),在UIAbility的UI頁面可見之前,即UIAbility切換至

    2024年01月16日
    瀏覽(58)
  • #Uniapp:頁面生命周期&應(yīng)用生命周期應(yīng)用

    創(chuàng)建-運(yùn)行-銷毀 應(yīng)用的生命周期 App.vue 頁面的生命周期

    2024年01月23日
    瀏覽(29)
  • Activity詳細(xì)解釋(生命周期、以各種方式啟動Activity、狀態(tài)保存,等完全退出)

    Activity詳細(xì)解釋(生命周期、以各種方式啟動Activity、狀態(tài)保存,等完全退出)

    簡單的說:Activity或者懸浮于其它窗體上的交互界面。 在一個應(yīng)用程序中通常由多個Activity構(gòu)成。都會在Manifest.xml中指定一個主的Activity,例如以下設(shè)置 actionandroid:name=”android.intent.action.MAIN” / 當(dāng)程序第一次執(zhí)行時用戶就會看這個Activity,這個Activity能夠通過啟動其它的Activi

    2024年02月04日
    瀏覽(29)
  • 微信小程序——生命周期,生命周期的分類,頁面生命周期,生命周期函數(shù)的分類,應(yīng)用的生命周期函數(shù),頁面的生命周期函數(shù),wxs腳本概述

    微信小程序——生命周期,生命周期的分類,頁面生命周期,生命周期函數(shù)的分類,應(yīng)用的生命周期函數(shù),頁面的生命周期函數(shù),wxs腳本概述

    生命周期( Life Cycle )是指一個對象從創(chuàng)建-運(yùn)行-銷毀的整個階段,強(qiáng)調(diào)的是一個時間段。 例如: .張三出生,表示這個人生命周期的開始 .張三離世,表示這個人生命周期的結(jié)束 .中間張三的一生,就是張三的生命周期 我們可以把每個小程序運(yùn)行的過程,也概括為生命周

    2024年02月01日
    瀏覽(29)
  • 高級進(jìn)階多線程——多任務(wù)處理、線程狀態(tài)(生命周期)、三種創(chuàng)建多線程的方式

    高級進(jìn)階多線程——多任務(wù)處理、線程狀態(tài)(生命周期)、三種創(chuàng)建多線程的方式

    Java中的多線程是一個同時執(zhí)行多個線程的進(jìn)程。線程是一個輕量級的子進(jìn)程,是最小的處理單元。多進(jìn)程和多線程都用于實現(xiàn)多任務(wù)處理。 但是,一般使用多線程而不是多進(jìn)程,這是因為線程使用共享內(nèi)存區(qū)域。它們不分配單獨的內(nèi)存區(qū)域以節(jié)省內(nèi)存,并且線程之間的上下

    2024年02月13日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包