一、Views

1.1)、Android的所有的控件都是View,在Android上View绘制结束后,就不会重绘,知道调用invalidate时才会重绘; Flutter中是Widget,它仅支持一帧,并且在每一帧上,flutter的框架都会创建一个widget实例树(相当于一次绘制整个界面)。
1.2)、Android中可以通过直接对view进行改变来更新视图;而widget是不可变的,不会直接更新,必须使用widget的状态state,调用setState触发build方法,更新数据,widget会被重建
1.3)、Android使用xml编写布局;Flutter是使用widget树来编写布局
1.4)、Android中使用父级控件调用addChild或removeChild动态添加或者删除View;Flutter中,widget是不可变的,没有addChild,可以传入一个函数,该函数返回一个widget给父项,并通过布尔值控制该widget的创建
1.5)、Android中使用View.animate()对视图进行动画处理;在Flutter中,使用AnimationController和Interpolator
1.6)、Android中使用Canvas在屏幕上自定义形状;在Flutter中,使用CustomPaint和CustomPainter绘制画布
1.7)、Android中通过继承View或者已存在的某个控件自定义View;Flutter中,一个自定义的Widget通常是通过组合其他widget来实现的,不是继承

二、Intents

2.1)、Android中Intents主要有两种场景:在Activity之间切换,以及调用外部组件;Flutter中可以通过Native整合来触发Intents,在Flutter中切换屏幕,您可以访问路由绘制新的widget,管理多个屏幕有两个核心概念:Route和Navigator,Route是屏幕或者页面的抽象,相当于activity;Navigator是管理Route的widget,Navigator通过push和pop route实现页面切换
2.2)、Flutter可以通过直接与Android层通信,并请求共享数据来处理来自Android的Intents:首先处理Android端共享文本数据,然后通过MethodChannel发送
2.3)、处理Flutter中所有路由的Navigator类,可用于从已经push到栈的路由的回调中获取结果。

三、异步UI

3.1)、Dart是单线程执行模型,支持Isolates(隔离区,在另一个线程中运行Dart代码的方式)、事件循环和异步编程。除非启动一个Isolate,否则Dart代码将在主UI线程中运行,并由事件循环驱动(和javaScript一样)

3.2)、Flutter是单线程的,运行一个事件循环,不用担心线程管理,不必使用AsyncTask或者IntentServices
3.3)、但是有时处理大量数据导致UI挂起,在Flutter中可以利用多个CPU内核来执行耗时或者计算密集型任务,通过使用Isolates来完成。他是一个独立的执行线程,运行时不会与主线程共享任何内存,也就是说不能从该线程访问变量或者通过调用setState来更新UI

3.4)、Android使用OkHttp,Flutter使用“http”package进行网络通信很简单,(Http,HttpClient两种方式)
3.5)、Android中执行耗时任务时,通常会显示进度指示器;Flutter中通过Progress Indicator widget实现,

四、项目结构和资源

4.1)、Android中xhdpi和xxhdpi,Flutter中,创建一个名为images的文件夹,并为每个图像文件生成一个@2x和@3
x文件,需要在pubspec.yaml文件中声明这些图片
4.2)、Android中使用res/values/string.xml,Flutter中创建一个名为Strings的类
4.3)、Android中使用Gradle文件添加依赖;Flutter中使用pubspec.yaml声明用于外部依赖
4.4)、Android中的Activity和Fragment都对应Flutter中的widget
4.5)、Android中通过复写Activity的方法来捕获Activity的生命周期;Flutter通过挂接WidgetsBinding观察并监听didChangeAppLifecycleState更改事件来监听生命周期事件(resumed、inactive、paused、suspending)

五、手势检测和触摸事件处理

5.1)、Android通过调用setOnClickListener将onClick绑定到View上;Flutter添加触摸监听有两种方法:第一种,如果widget支持事件监听,则可以将一个函数传递给它进行处理,第二种,如果widget不支持事件监听,则可以将widget包装到GestureDetector中,并处理函数传递给onTap参数
5.2)、GestureDetector可以监听多种手势

六、数据库和本地存储

6.1)、Android中使用SharedPreferences存储键值对;Flutter中通过插件Shared_Prefrences来访问此功能
6.2)、Android送使用SQLite存储,Flutter中使用SQFlite插件访问SQFlite功能

七、Flutter插件

八、Flutter热重载

Flutter 可以通过 热重载(hot reload) 实现快速的开发周期,热重载就是无需重启应用程序就能实时加载修改后的代码,并且不会丢失状态(译者语:如果是一个web开发者,那么可以认为这和webpack的热重载是一样的)。简单的对代码进行更改,然后告诉IDE或命令行工具你需要重新加载(点击reload按钮),你就会在你的设备或模拟器上看到更改

参考Flutter中文官网

更多相关文章

  1. Android上鲜为人知的UI控件介绍和使用
  2. 【Android开发】多媒体应用开发-使用MediaPlayer播放音频
  3. Android开发笔记之【Android(安卓)API】Android(安卓)4.1 API官
  4. Android内存管理-SoftReference的使用
  5. 使用Android(安卓)NDK中的独立toolchain来开发C/C++程序
  6. 使用pull解析器操作xml文件
  7. 箭头函数的基础使用
  8. NPM 和webpack 的基础使用
  9. Python list sort方法的具体使用

随机推荐

  1. Android(安卓)数据通信
  2. Android类库介绍
  3. Android启动流程分析(十二) SystemServer
  4. Android深入浅出系列课程---Lesson1 AAF1
  5. Android常见布局简述
  6. Android之NDK开发
  7. Android(安卓)入门教程:安装 Android(安卓
  8. 《宅男的android开发指南》(翻译)--1
  9. Android设备获取wifi下的ipv6地址
  10. View类xml属性、方法