说明:写个文章简单总结一下鸿蒙和安卓开发常见的一些异同之处,能快速认识理解一下鸿蒙和安卓的开发,意在同时开发两个端的或者转鸿蒙比较方便理解。有空会更新一下。
一、鸿蒙/安卓开发相关
1、开发文档
安卓官方文档:
https://developer.android.google.cn/guide
2、关于调试
鸿蒙调试:现在只能用远程模拟器,没有本地调试,对于没有真机调试,现在鸿蒙的远程模拟器还是比较麻烦,运行卡,1小时后就断开要重新安装了。然后对于分布式应用没真机现在也调试不了,以后要比较久才能开放本地模拟器和分布式应用调试。
二、鸿蒙/安卓开发语言对比
鸿蒙开发语言:
- Java (应用层开发)
- JS(使用前端渐进式的开发方式,参考Vue、小程序开发)(应用层开发)
- C/C++ (Framework/系统/硬件层开发)
Android开发语言:
- Java (应用层开发)
- kotlin (JVM语言,可以看成Java的衍生语言,比Java要简洁、易用)(应用层开发)
- C/C++ (Framework/系统/硬件层开发)
简单总结下鸿蒙开发的特点:
- 鸿蒙和安卓的应用层的开发都使用了Java开发,其鸿蒙的Java的API和安卓很相似,安卓开发的人员能够很快熟悉鸿蒙的开发
- 鸿蒙使用JS的前端语言作为开发应用语言,一方面由于国内比较多前端开发人员,容易吸引更多的人转到鸿蒙开发,一方面由于前端编程效率要比开发Java要快点,更容易开发。
三、鸿蒙/安卓常见使用的类/资源对比
1、重要基础类
鸿蒙 | 安卓 | 描述 |
---|---|---|
Page Ability (Ability 、AbilitySlice) | Activity | 用户显示和交互的界面。鸿蒙的Page Ability一般由Page(Ability类)和AbilitySlice构成,一个Page可以由一个或多个AbilitySlice构成,可以说Page是管理AbilitySlice,这个和安卓的Activity有点区别,可以把一个AbilitySlice看作一个Activity界面,Page就是一组Activity;安卓上一个Activity就是一个Activity,没有组的定义,都是单独使用的,而鸿蒙一般是Page和AbilitySlice组合使用的。 |
Service Ability | Service | 后台服务,处理后台的任务 |
Data Ability | ContentProvider | 数据内容提供者,用来管理自身应用、共享数据给其他应用 |
Fragment | 模块化界面。Fragment依附于Activity上,一个Activity有多个Fragment界面回来切换。鸿蒙没有类似的功能类,可以说和AbilitySlice有点相似之处 | |
公共事件 (CommonEventData) | BroadcastReceiver | 用于发送、接收广播消息,鸿蒙和安卓在实现上有点差别,鸿蒙类似EventBus之类的框架,实际上都差不多,都是使用观察者的模式实现 |
Intent | Intent | 意图,对象之间传递信息的载体,主要用于组件间启动和传递数据,如上面鸿蒙的Page Ability与Service Ability之间的启动和传递数据,安卓的Activity和Activity,Activity和Service之前传递数据,就需要它 |
TaskDispatcher | 任务分发器,鸿蒙已经把封装了类似线程池的类,安卓上要自己使用Java的线程池类 | |
EventHandler | Handler | 线程间通信的类,常用于子线程中通知更新UI |
2、Java/XML UI类:
鸿蒙 | 安卓 | 描述 |
---|---|---|
Component | View | 基础视图组件,各类UI组件基本都继承它。 |
ComponentContainer | ViewGroup | 组视图,可以把它看成一个容器,这个容器能放多个视图组件。鸿蒙的ComponentContainer继承Component,安卓的ViewGroup继承View |
DirectionalLayout | LinearLayout | 按照水平或者垂直方向的布局,安卓叫线性布局,最常用的布局 |
StackLayout | FrameLayout | 堆叠/层次/帧布局,视图组件会一层层堆叠覆盖,简单的来说就是后面的视图叠在前面的视图上,最常用的布局 |
DependentLayout | RelativeLayout | 相对布局,按照布局中的其他组件的位置来定位的 |
AdaptiveBoxLayout | 鸿蒙的自适应盒子布局,大概就是分为行和指定的多少列,每一行中,每一列的高度按照最高的那一列,每一列的宽度按照指定的高度。安卓的没有相似的布局。 | |
ConstraintLayout | 安卓的约束布局,要通过support包才使用,官方推荐的布局方式(创建带视图的项目一般默认使用它),其布局特性和RelativeLayout很相似,都是根据各个视图或父视图的相对位置来定位的,其灵活性要高于 RelativeLayout,而且可以使用鼠标拖动设计,设计上是比较方便,但是国内依然比较少用 | |
PositionLayout | AbsoluteLayout | 位置布局,子组件通过指定的x/y坐标定位位置 |
TableLayout | TableLayout | 表格布局,按照表格排列划分组件 |
Text | TextView | 文本视图组件,显示普通的文字 |
Button | Button | 按钮视图组件 |
TextField | EditText | 可编辑文本框视图组件 |
Image | ImageView | 图片视图组件 |
TabList和Tab | TabLayout | Tab标题栏视图组件,实现多个标签栏/标题,能快速切换 |
Picker | NumberPicker | 滑动选择器视图组件 |
DatePicker | DatePicker | 年月日选择器视图组件 |
TimePicker | TimePicker | 时分秒选择器视图组件 |
Switch | Switch | 开关切换视图组件 |
RadioButton | RadioButton | 单选按钮视图组件 |
RadioContainer | RadioGroup | 单选按钮组,RadioButton的容器,在其包裹下的RadioButton保证只有一个被选项 |
Checkbox | Checkbox | 多选框视图组件 |
ProgressBar | ProgressBar | 进度条视图组件 |
RoundProgressBar | 圆形进度条视图组件,安卓官方没有实现圆形的进度条组件,需要自己实现 | |
ToastDialog | Toast | 吐司,窗口上方弹出的文字提示对话框 |
ScrollView | ScrollView(垂直滚动)、HorizontalScrollView(横向滚动) | 滚动视图组件,用来包裹子组件,子组件超过一定高度或者宽度就能滚动显示 |
ListContainer | ListView/RecyclerView | 列表视图组件,用来显示列表数据 |
PageSlider | ViewPager | 页面滑动切换视图组件,广告切换功能一般会用到 |
PageSliderIndicator | TabLayout | 指示器组件,安卓的TabLayout一般配合ViewPager使用 |
WebView | WebView | 访问web页面的组件 |
3、其他类:
鸿蒙 | 安卓 | 描述 |
---|---|---|
HiLog | Log | 日志打印类 |
4、资源
鸿蒙 | 安卓 | 描述 |
---|---|---|
ResourceTable | R | 资源引用类,studio会自动构建该类。鸿蒙的需要ResourceTable类来引用,安卓直接使用R类资源引用,鸿蒙的没有安卓方便~ |
ResourceTable.Id_xx | R.id.xx | Java代码中Id资源引用 |
ResourceTable.Layout_xx | R.layout.xx | Java代码中Layout资源引用 |