优雅关闭¶
当 Flutter 应用关闭时,Rust 侧的整个异步运行时默认不会被丢弃。
在某些情况下,您可能需要在关闭应用之前正确地释放所有 Rust 资源。这可能包括实现了 Drop trait 的结构体实例,这些实例负责保存文件或释放资源等任务。
为此,您可以使用 Flutter 的 AppLifecycleListener,在关闭 Flutter 应用之前调用 finalizeRust 函数。
lib/main.dart¶
import 'dart:ui';
import 'package:flutter/material.dart';
import 'package:rinf/rinf.dart';
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
late final AppLifecycleListener _listener;
@override
void initState() {
super.initState();
_listener = AppLifecycleListener(
onExitRequested: () async {
finalizeRust(); // 关闭异步 Rust 运行时。
return AppExitResponse.exit;
},
);
}
@override
void dispose() {
_listener.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
// 返回一个 widget。
}
}
值得注意的是,AppLifecycleListener 在应用关闭时并不总是可靠的。以下是引自官方 Flutter 文档 的一段文字:
无法预测应用何时会终止。例如,用户的电池可能起火,或者用户可能将设备掉入游泳池,或者操作系统可能因内存压力而单方面终止应用进程。应用有责任确保即使面对快速、计划外的终止,也能保持良好的行为。