一、Flutter中的Activity和Fragment是什么?
在Android中,Activity
代表用户可以做的一件专注的事情。Fragment
代表一个行为或用户界面的一部分。Fragment
是一种模块化代码、为大屏幕构建复杂用户界面以及帮助扩展应用程序UII的方法。在Flutter中,这两个概念都属于Widget
的范畴。
要连接有关于构建Activity和Fragment的UI的更多信息,可以查看文章——Android 开发人员的 Flutter:如何在 Flutter 中设计 Activity UI。
如Intent
部分所述,Flitter中的屏幕由Widget
显示 ,因为在Flutter中一切都是小部件。使用Navigator
在 不同的Route
,跳转到不同的屏幕或页面,或者可能代表哦相同数据的不同状态或渲染。
二、如何监听Android Activity生命周期事件?
在Android中,您可以override Activity中的方法以捕获Activity的生命周期,或在Application
的ActivityLifecycleCallbacks
。在Flutter中,您没有这两个概念,但是您可以通过挂接到WidgetsBinding
观察者并监听didChangeAppLifecycleState()
更改事件来监听生命周期事件。
可观察到的生命周期事件是:
detached
——该应用程序仍然托管在Flutter引擎上,单与任何host view分离。inactive
——应用程序处于非活动状态并且不接收用户输入。paused
——应用程序当前对用户不可见,不影响用户输入,并在后台运行。在Android中个相当于onPause()
。resumed
——应用程序可见并相应用户输入。在Android中相当于onPostResumen()
。
有关这些状态含义的更多详细信息,请参阅 AppLifecycleStatus
文档。
您可能已经注意到,只有一小部分Activity生命周期事件可用;虽然FlutterActivity
确实在内部捕获了几乎所有的Activity生命周期事件并将它们发送到Flutter引擎,但它们大多与你隔离开来。Flutter负责为您启动和停止引擎,在大多数情况下,几乎没有理由需要在Flutter端观察Activity生命周期。如果您需要观察生命周期以获取或释放任何 native资源,您可能无论如何都因该从navite端进行。
一下是如何观察包含Activity的生命周期状态的示例:
import 'package:flutter/widgets.dart';
class LifecycleWatcher extends StatefulWidget {
const ListcycleWatch({Key? key}) : super(key: key);
@override
State<LifecycleWatcher> createState() => _LifecycleWatchState();
}
class _LifecycleWatcherState extends State<LifecycleWatcher> with WidgetsBindingObserver {
AppLifecycleState? _lastLifecycleState;
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
setState(() {
_lastLifecycleState = state;
});
}
@override
Widget build(BuildContext context) {
if (_lastLifecycleState == null) {
return const Text(
'This widget has not observed any lifecycle changes',
textDirection: TextDirection.ltr,
);
}
return Text(
'The most recent lifecycle stte this widget observed was: $_lastLifecycleState',
textDirection: TextDirection.ltr,
);
}
}
void main() {
runApp(const Center(chiild: LifecycleWatcher()));
}