簡體   English   中英

Flutter Dart - 屏幕關閉時隔離停止工作

[英]Flutter Dart - isolate stops working when screen is off

我有從服務器刷新數據的代碼,即使屏幕關閉也需要運行。 我試圖用一個隔離來做到這一點:

static void isolateFunc(SendPort mainSendPort) async{
    String _answer = "";
    while(true){
      Socket socket = await Socket.connect(ipAddress, port, timeout: Duration(seconds: 5));
      socket.add(utf8.encode("connection test"));
      socket.listen((List<int> event) {
        _answer = utf8.decode(event);
      });
      socket.close();
      await Future.delayed(Duration(seconds: 5));
    }
}

這在屏幕打開時工作正常。 但是關閉屏幕后它可能正常刷新5次,然后每30秒刷新幾次(即使延遲設置為5秒)然后就停止了。 我這樣調用 initState 中的隔離:

 @override
  void initState() {
    super.initState();
    anotherRefresher();
    ReceivePort recievePort = ReceivePort();
    Isolate.spawn(isolateFunc, recievePort.sendPort);
  }

android 設置中的電池優化已關閉。 我不明白這一點:/請問如何處理這個問題?

一段時間后我發現,如果不將其設置為后台或前台進程,則無法在后台繼續運行dart 代碼。 Android 和 iOS 都會始終限制您的代碼以延長電池壽命。 即使關閉電池優化也無濟於事。 因此,即使在屏幕關閉時也要保持 dart 代碼運行,您需要設置后台或前台進程 為此,您可以進行一些平台原生編碼並通過平台渠道或使用插件進行連接。 由於我不知道 Swift 或 Kotlin,所以我決定找一些插件。 我嘗試了更多,一段時間后我可以說插件flutter_background_service是最好的插件之一。 或者根據您的需要,您可以找到其他插件或嘗試自己編寫代碼。 祝你好運:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM