面试题答案
一键面试异步/await工作原理
- 异步:在Flutter中,异步操作允许代码在后台线程执行,而不会阻塞主线程。这是通过
Future
类实现的,Future
表示一个异步操作的结果,它可能在未来某个时间完成。 - await:
await
关键字只能在标记为async
的函数内部使用。它会暂停当前函数的执行,直到Future
完成(即异步操作结束),然后返回Future
的结果。如果Future
出错,await
会抛出异常,可以使用try-catch
块捕获。
对应用性能的优化
- 避免主线程阻塞:Flutter应用的主线程负责UI渲染和用户交互。如果在主线程执行网络请求等耗时操作,会导致UI卡顿。使用异步/await,网络请求等操作在后台执行,主线程可以继续处理UI相关事务,保证应用的流畅性。
- 提高资源利用率:在等待网络请求结果时,其他代码可以继续执行,充分利用系统资源,提高应用整体效率。
网络请求场景举例
import 'package:http/http.dart' as http;
Future<String> fetchData() async {
try {
var response = await http.get(Uri.parse('https://example.com/api/data'));
if (response.statusCode == 200) {
return response.body;
} else {
throw Exception('Failed to load data');
}
} catch (e) {
print('Error: $e');
rethrow;
}
}
void main() async {
String data = await fetchData();
print('Fetched data: $data');
}
在上述代码中,fetchData
函数被标记为async
,其中await http.get
暂停函数执行,直到网络请求完成。这样主线程不会被阻塞,在等待网络响应期间可以处理其他任务。当请求成功返回数据时,await
返回响应体,继续执行后续代码。如果请求失败,await
抛出异常,可在catch
块中处理。