Android原生和Flutter使用过程的差异对比(三)

1、页面跳转携带数据和返回

Android:

(一)Activity页面之间的跳转通过startActivity,如需携带参数则额外附带Bundle;Fragment通过setArguments携带参数。

(二)从A页面跳转到B页面,B页面处理后返回A页面并携带参数,startActivityForResult和onActivityResult配合使用。

(三)跳转外部应用,如打开系统相机、设置、安装其他应用或打开别的App,Intent设置指定uri后进行操作。

Flutter:

(一)打开新页面

不传值的跳转
传值的跳转

(二)页面返回传值

(三)跳转外部应用,Flutter本身不支持,需依赖和Native的交互方式编写原生代码(Android和Ios两端),发起调用。以下是App内部更新下载和安装更新的代码示例:


Flutter端发起调用


Android端的实现


通过Intent执行安装

2、线程

Android:区分主线程(UI线程)和子线程(IoThread、WorkThread等),通常在子线程进行耗时的操作,比如下载数据、上传文件等;在主线程进行UI的更新。

常用的方式:Thread+handler、AsyncTask、runOnUiThread、RxJava等多种

Flutter:Dart是单线程执行模型,默认所有代码都是在主UI线程中运行。通过async声明异步函数,await表示在函数中等待耗时任务的完成。


由于异步仍然是在同一个UI线程中做运算,如进行耗时久且计算量大的操作还是会阻塞UI刷新。

Dart支持通过隔离isolate的方式执行并发,可以将其视为进程。 每个隔离区都有其自己的内存和代码,不受其他隔离区的影响。

缺点是使用繁琐,每创建一个新的isolate至少需要2mb左右空间,并且需要在执行完毕后手动kill否则会长期占据内存。

官方建议使用Compute进行多线程异步操作,经测试执行完毕会自行释放内存(Flutter Observatroy 检测工具)。

isolate的详细使用说明和相关注意事项可参考Isolate及compute、Flutter的isolate机制

你可能感兴趣的:(Android原生和Flutter使用过程的差异对比(三))