[英]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.