Android UI在调用方法通道时冻结

Android UI在调用方法通道时冻结,android,flutter,Android,Flutter,我正在尝试调用方法通道来应用墙纸。 我使用回购作为参考 void _setWallpaper() async { showProgressDialog(); var file = await DefaultCacheManager().getSingleFile(widget.post.url); try { final int result = await platform.invokeMethod('setWallpaper', file.path); print('Wallp

我正在尝试调用方法通道来应用墙纸。 我使用回购作为参考

void _setWallpaper() async {
 showProgressDialog();
 var file = await DefaultCacheManager().getSingleFile(widget.post.url);
 try {
  final int result = await platform.invokeMethod('setWallpaper', file.path);
  print('Wallpaer Updated.... $result');
 } on PlatformException catch (e) {
  print("Failed to Set Wallpaer: '${e.message}'.");
 }
 Navigator.pop(context);
}
该对话框包含一个CircularProgressIndicator和文本,但CircularProgressIndicator会冻结,整个UI有一段时间没有响应。墙纸被应用,用户界面变得灵敏


可能是因为图像的大小(大约5-10MB)。

android和ios都会这样吗?我刚刚检查了android代码,位图解码可能是线程阻塞,所以我会尝试在服务中运行该代码。虽然正确实现需要一些时间。@AlexeySubbotin我还没有在iOS上尝试过它。那么您肯定应该将kotlin代码作为android服务重写,或者至少(不知道第二个是否有效)作为单独的线程重写。特别是如果你试图缩小图像的大小,从而减少冻结时间,那么位图解码实际上是在破坏线程计算,单独计算位图肯定会有帮助。android和ios都会这样吗?我刚刚检查了android代码,位图解码可能是线程阻塞,所以我会尝试在服务中运行该代码。虽然正确实现需要一些时间。@AlexeySubbotin我还没有在iOS上尝试过它。那么您肯定应该将kotlin代码作为android服务重写,或者至少(不知道第二个是否有效)作为单独的线程重写。特别是如果您尝试减小图像的大小,从而减少冻结时间,那么位图解码实际上是在中断线程计算,单独计算位图肯定会有所帮助。