面试题答案
一键面试iOS 性能优化要点及 Flutter 代码优化措施
- 内存管理
- 要点:iOS 对内存使用较为敏感,应用在后台时内存占用过高可能被系统强制关闭。需避免内存泄漏,关注对象生命周期。
- Flutter 代码优化:使用
StatefulWidget
时,在dispose
方法中释放资源,如取消定时器、关闭流等。例如:
class MyWidget extends StatefulWidget {
@override
_MyWidgetState createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
Timer? _timer;
@override
void initState() {
super.initState();
_timer = Timer.periodic(Duration(seconds: 1), (timer) {
// 执行定时任务
});
}
@override
void dispose() {
_timer?.cancel();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Container();
}
}
- 渲染优化
- 要点:iOS 设备屏幕分辨率和刷新率多样,需确保高帧率渲染。减少复杂布局嵌套,避免过度重绘。
- Flutter 代码优化:使用
RepaintBoundary
组件包裹不需要频繁重绘的部分,防止不必要的重绘。例如:
class MyComplexWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return RepaintBoundary(
child: Column(
children: [
// 复杂且不常变化的子组件
],
),
);
}
}
- 资源加载
- 要点:iOS 应用包大小有限制,需优化资源加载,避免加载过多不必要资源。
- Flutter 代码优化:使用
Image.asset
的package
和scale
属性来按需加载图片资源,减少内存占用。例如:
Image.asset(
'assets/images/logo.png',
package: 'your_package_name',
scale: MediaQuery.of(context).devicePixelRatio,
)
Android 性能优化要点及 Flutter 代码优化措施
- 内存管理
- 要点:Android 设备碎片化严重,不同设备内存差异大。要合理分配内存,避免内存抖动。
- Flutter 代码优化:复用
Widget
实例,减少频繁创建和销毁。例如使用ListView.builder
构建列表时,通过itemBuilder
复用列表项。
ListView.builder(
itemCount: itemList.length,
itemBuilder: (context, index) {
return MyListItem(itemList[index]);
},
)
- 渲染优化
- 要点:Android 系统版本众多,硬件性能参差不齐,需优化渲染性能以适应不同设备。减少过度绘制,优化动画性能。
- Flutter 代码优化:在动画中使用
AnimatedBuilder
而不是AnimatedWidget
,当动画值改变时,仅重建需要更新的部分,而不是整个Widget
树。例如:
class MyAnimatedWidget extends StatefulWidget {
@override
_MyAnimatedWidgetState createState() => _MyAnimatedWidgetState();
}
class _MyAnimatedWidgetState extends State<MyAnimatedWidget> with SingleTickerProviderStateMixin {
late AnimationController _controller;
late Animation<double> _animation;
@override
void initState() {
super.initState();
_controller = AnimationController(
vsync: this,
duration: Duration(seconds: 2),
);
_animation = Tween<double>(begin: 0, end: 1).animate(_controller);
_controller.repeat();
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return AnimatedBuilder(
animation: _animation,
builder: (context, child) {
return Transform.scale(
scale: _animation.value,
child: child,
);
},
child: Container(
width: 100,
height: 100,
color: Colors.blue,
),
);
}
}
- 资源加载
- 要点:Android 支持多种资源密度,要确保资源适配不同屏幕密度的设备。
- Flutter 代码优化:利用
AssetImage
根据设备像素密度加载合适的图片资源。例如:
Image(
image: AssetImage('assets/images/image.png'),
)
同时,在 pubspec.yaml
中配置不同密度的图片资源,如 assets/images/image@2x.png
等,Flutter 会自动根据设备像素密度选择合适的图片。