纯血鸿蒙崛起,原生Android挑战?两大操作系统巅峰对决,智能设备未来谁主沉浮?

鸿蒙HarmonyOS和原生Android系统虽然在一些方面相似,但在架构、设计理念、API、开发工具等方面存在一些差异。鸿蒙系统的目标是跨设备、分布式的操作系统,强调多设备协同和资源共享,而Android则主要集中在智能手机和移动设备领域。

下面将从几个角度对比鸿蒙和原生Android,并结合具体项目代码做对比说明。

1. 架构差异

原生Android:
Android是基于Linux 内核的移动操作系统,应用的运行环境由AndroidRuntime(ART)提供支持。Android的应用程序通常运行在单个设备上,并且系统中各种服务和组件多为单设备本地服务。

在这里插入图片描述

鸿蒙HarmonyOS:
鸿蒙操作系统采用了分布式架构,能够让应用在多种设备上运行,设备之间通过分布式数据管理和设备协作进行无缝连接。鸿蒙的核心是 “Ark” 引擎,支持统一的开发框架,能够将应用在不同设备之间无缝迁移。

  • 多设备协同:鸿蒙的分布式能力允许应用跨设备运行,在不同设备之间共享资源,例如手机、平板、电视、甚至智能穿戴设备。

2. 开发语言与工具

原生Android:
Android主要使用Java和Kotlin作为开发语言,开发者可以使用AndroidStudio 开发Android应用。原生Android应用开发者会基于AndroidSDK 构建应用。

鸿蒙HarmonyOS:
鸿蒙系统主要使用 Java、Kotlin 和 C/C++ 作为开发语言,同时支持使用HarmonyOS特有的开发框架和 API。开发者可以使用 DevEco Studio 开发鸿蒙应用。

3. UI 构建差异

原生AndroidUI:
原生Android应用使用View和ViewGroup来构建用户界面。常见的布局有LinearLayout、RelativeLayout、ConstraintLayout等。

鸿蒙HarmonyOSUI:
鸿蒙系统提供了 Ability 和 ArkUI 来构建 UI。Ability是鸿蒙应用的核心组件,可以理解为一个类似于 Activity 的概念,ArkUI则是鸿蒙的 UI 开发框架。

与Android的 View 组件类似,鸿蒙 UI 中通过声明式的布局方式构建 UI,采用 Declarative UI 编程模式,类似于 Jetpack Compose。

4. 跨设备能力:

鸿蒙的一个重要特性是其分布式应用框架,允许应用跨设备无缝运行。通过 Ability 的定义,应用可以在多种设备间运行和协作。

示例:原生Android中的共享数据

在Android中,通常使用Intent和Bundle在应用间传递数据,或者通过ContentProvider共享数据。

// 通过 Intent 传递数据
val intent = Intent(this, OtherActivity::class.java)
intent.putExtra("key", "value")
startActivity(intent)

示例:鸿蒙HarmonyOS中的跨设备协作

在鸿蒙中,跨设备的数据传递和功能协作是通过 Ability 和 DistributedData 进行的。通过定义不同设备上的 Ability,应用能够在多个设备间无缝协作。

// 在鸿蒙中定义一个 BasicAbility(类似于Android的 Activity)
public class MainAbility extends Ability {
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        // 设定主界面的布局
        setUIContent(ResourceTable.Layout_ability_main);
    }

    @Override
    public void onStop() {
        super.onStop();
    }
}

// 通过 DistributedData 在不同设备之间共享数据
public class DistributedDataDemo {
    private DistributedDatabase database;

    public void initialize() {
        // 获取 DistributedDatabase 实例
        database = DistributedDatabase.getInstance();
    }

    public void writeData() {
        // 写入数据到共享数据库
        database.put("key", "value");
    }

    public String readData() {
        // 从共享数据库读取数据
        return database.get("key");
    }
}

5. 生命周期管理

Android生命周期:
Android的生命周期管理基于Activity或Fragment的生命周期回调。比如,onCreate()、onStart()、onResume()等。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

@Override
protected void onResume() {
    super.onResume();
    // 页面恢复时的逻辑
}

鸿蒙生命周期:
在鸿蒙中,生命周期管理是基于Ability的。Ability类似于Android的Activity,但它具有更灵活的生命周期,允许在多个设备之间共享状态和信息。

// 在鸿蒙中定义 Ability 生命周期
public class MainAbility extends Ability {
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        // 初始化界面
        setUIContent(ResourceTable.Layout_ability_main);
    }

    @Override
    public void onActive() {
        super.onActive();
        // 能够访问到界面和用户交互的逻辑
    }

    @Override
    public void onStop() {
        super.onStop();
        // 页面停止时的清理操作
    }
}

6. 应用发布和权限管理

Android权限管理:
Android应用权限在AndroidManifest.xml中进行声明。在运行时,某些权限还需要用户授权。

<uses-permissionAndroid:name="android.permission.ACCESS_FINE_LOCATION" />

鸿蒙 权限管理:
鸿蒙系统的权限管理相对更加简化,通过 DevEco Studio 提供的权限管理工具来声明和管理应用的权限。

<permission name="ohos.permission.LOCATION" />

7. 应用分发和多设备协同

鸿蒙的分发机制更加侧重于跨设备协作。鸿蒙应用不仅能够在智能手机上运行,还可以跨平板、电视、车机、穿戴设备等多个设备平台运行。通过分布式技术,鸿蒙系统能够实现同一应用在不同设备之间的无缝协作。

项目举例
下面结合一个简单的示例项目,展示如何使用鸿蒙HarmonyOS和原生Android实现相似的功能。我们将构建一个简单的应用,用户可以在一个设备(如手机)上输入数据,并将该数据同步到另一个设备(如平板或智能电视)。这将展示 鸿蒙的跨设备能力 和Android中跨设备的传统方式。

- 在一个设备上输入文本。
- 通过网络或本地存储同步文本数据到另一个设备(例如,平板)。
- 我们会分别实现Android和HarmonyOS版本,进行对比。

一、 鸿蒙HarmonyOS实现

鸿蒙系统的主要特性之一是 Ability(类似于Android中的Activity),而它的分布式特性让应用可以在多个设备之间协作。鸿蒙使用 DistributedData 来共享数据。

(1) 创建一个鸿蒙应用
在鸿蒙中,分布式应用通常涉及 Ability、DistributedDatabase、Data同步 等概念。我们将创建一个跨设备同步数据的简单例子。

第1步:创建一个新的 Ability(类似于Android的 Activity)

package com.example.harmonyapp;

import ohos.aafwk.ability.Ability;
import ohos.aafwk.content.Intent;
import ohos.agp.components.EditText;
import ohos.agp.components.Button;
import ohos.data.DatabaseHelper;
import ohos.data.resultset.ResultSet;
import ohos.data.dataability.DataAbilityHelper;
import ohos.data.dataability.DataAbilityPredicates;
import ohos.data.dataability.DataAbilityOperation;
import ohos.data.dataability.DataAbilityOperation.OperationType;

public class MainAbility extends Ability {
    private EditText inputText;
    private Button saveButton;

    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        setUIContent(ResourceTable.Layout_ability_main);

        inputText = (EditText) findComponentById(ResourceTable.Id_input_text);
        saveButton = (Button) findComponentById(ResourceTable.Id_save_button);

        // Save button click listener
        saveButton.setClickedListener(component -> {
            String text = inputText.getText();
            saveDataToSharedDatabase(text);
        });
    }

    private void saveDataToSharedDatabase(String text) {
        // 使用 DistributedData 保存数据,跨设备共享
        DataAbilityHelper dataAbilityHelper = DataAbilityHelper.creator(this);
        DataAbilityOperation operation = new DataAbilityOperation.Builder()
                .withUri("dataability://com.example.harmonyapp.data/records")
                .withValue("text", text)
                .withOperationType(OperationType.INSERT)
                .build();

        dataAbilityHelper.executeBatch(new DataAbilityOperation[] { operation });
    }
}

第2步:使用 DistributedData 进行数据同步

在鸿蒙系统中,数据可以通过 DistributedData 跨设备共享。例如,使用DataAbility实现跨设备数据同步。通过创建DataAbilityHelper,我们可以实现不同设备间的数据共享。

package com.example.harmonyapp.data;

import ohos.data.dataability.DataAbility;
import ohos.data.dataability.DataAbilityPredicates;
import ohos.data.resultset.ResultSet;
import ohos.data.dataability.DataAbilityHelper;

public class MyDataAbility extends DataAbility {
    @Override
    public ResultSet query(Uri uri, String[] projection, DataAbilityPredicates predicates) {
        // 查询数据
        DataAbilityHelper helper = DataAbilityHelper.creator(this);
        return helper.query(uri, projection, predicates);
    }

    @Override
    public int insert(Uri uri, ValuesBucket value) {
        // 插入数据
        DataAbilityHelper helper = DataAbilityHelper.creator(this);
        return helper.insert(uri, value);
    }
}

第3步:在布局文件中设置 UI

<!-- ability_main.xml -->
<LinearLayout xmlns:ohos="http://schemas.huawei.com/res/ohos"
    ohos:orientation="vertical"
    ohos:width="match_parent"
    ohos:height="match_parent">
    
    <EditText
        ohos:id="$+id:input_text"
        ohos:hint="Enter some text"
        ohos:height="60vp"
        ohos:width="match_parent"
        ohos:layout_marginTop="50vp" />
    
    <Button
        ohos:id="$+id:save_button"
        ohos:text="Save"
        ohos:width="match_parent"
        ohos:height="60vp"
        ohos:layout_marginTop="20vp" />
</LinearLayout>

二、原生Android实现

在Android中,我们可以使用SharedPreferences或ContentProvider来跨设备共享数据。为了简单起见,我们将使用SharedPreferences,并通过Firebase Realtime Database来同步数据到云端,使得其他设备可以读取和更新数据。

第1步:创建一个Activity

package com.example.androidapp;

importAndroid.os.Bundle;
importAndroid.view.View;
importAndroid.widget.Button;
importAndroid.widget.EditText;
importAndroidx.appcompat.app.AppCompatActivity;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;

public class MainActivity extends AppCompatActivity {
    private EditText inputText;
    private Button saveButton;
    private DatabaseReference databaseReference;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        inputText = findViewById(R.id.input_text);
        saveButton = findViewById(R.id.save_button);

        // 初始化 Firebase 数据库
        databaseReference = FirebaseDatabase.getInstance().getReference("sharedData");

        saveButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String text = inputText.getText().toString();
                saveDataToFirebase(text);
            }
        });
    }

    private void saveDataToFirebase(String text) {
        // 将数据保存到 Firebase 实时数据库
        databaseReference.setValue(text);
    }
}

第2步:在布局文件中设置 UI

<!-- activity_main.xml -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   Android:orientation="vertical"
   Android:layout_width="match_parent"
   Android:layout_height="match_parent">
    
    <EditText
       Android:id="@+id/input_text"
       Android:hint="Enter some text"
       Android:layout_width="match_parent"
       Android:layout_height="wrap_content"
       Android:layout_marginTop="50dp" />
    
    <Button
       Android:id="@+id/save_button"
       Android:text="Save"
       Android:layout_width="match_parent"
       Android:layout_height="wrap_content"
       Android:layout_marginTop="20dp" />
</LinearLayout>

第3步:使用 Firebase Realtime Database

  1. 在 Firebase Console 中创建一个项目,并获取 Google Services JSON 配置文件。
  2. 在 build.gradle 中添加 Firebase 依赖:
dependencies {
    implementation 'com.google.firebase:firebase-database:20.0.0'
}
  1. 使用 Firebase 实时数据库同步数据。

三、 对比分析

  1. 跨设备能力:
  • 鸿蒙:通过DistributedData和Ability实现跨设备协作和数据共享,鸿蒙系统的分布式架构使得应用可以在多个设备之间同步数据并实现无缝协作。
    -Android:通常通过云服务(如 Firebase)或ContentProvider实现跨设备的数据同步。在这个示例中,我们使用 Firebase Realtime Database 来同步数据,适用于多个Android设备之间。
  1. UI 构建:
  • 鸿蒙:使用类似Activity的 Ability 来管理生命周期和 UI 组件。布局采用类似 XML 的声明式方式。
    -Android:通过Activity和传统的View组件管理 UI。布局采用 XML 描述。
  1. 数据存储和共享:
  • 鸿蒙:使用 DistributedData 和 DataAbility 来处理跨设备的数据同步。
    -Android:使用SharedPreferences或Firebase等云端服务实现跨设备的数据同步。
  1. 开发工具:
  • 鸿蒙:使用 DevEco Studio 开发,支持多种设备的协同开发。
    -Android:使用AndroidStudio 开发,主要面向Android设备。

在这里插入图片描述

总结

通过这个示例,我们可以看到鸿蒙与Android在处理跨设备协同和数据同步时的差异。鸿蒙的分布式架构使得在多设备间同步数据变得更加容易,而Android则通过云服务(如 Firebase)实现跨设备的数据共享。在实际项目中,鸿蒙系统的分布式能力为开发跨设备协同的应用提供了更强大的支持,而Android更依赖于云服务来实现类似的功能。

- 架构差异:鸿蒙采用了分布式架构,支持多设备协作,而Android是单一设备的系统架构。
- 开发工具与语言:Android使用AndroidStudio 和 Java/Kotlin,而鸿蒙使用 DevEco Studio 和 Java/Kotlin(以及更多 C/C++ 支持)。
- UI 构建差异:Android使用传统的View和ViewGroup,而鸿蒙采用声明式 UI(类似 Jetpack Compose)。
- 跨设备能力:鸿蒙有强大的跨设备能力,通过 Ability 和 DistributedData 让应用在不同设备间协同工作,而Android通常局限于单一设备环境。
- 生命周期管理:虽然Android和鸿蒙都有类似Activity(或Ability)的生命周期管理机制,但鸿蒙更加关注跨设备和分布式生命周期的管理。

鸿蒙系统的最大特点是其跨设备协同能力和分布式应用框架,适合需要在多个设备上运行和协同工作的应用场景。Android适合单一设备的应用开发,且在移动端生态中已非常成熟。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/936452.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

新手快速入门!低功耗4G模组Air780E——使用文件系统存储温湿度数据来啦~

小伙伴们&#xff0c;今天我们来学习低功耗4G模组Air780E快速入门之使用文件系统存储温湿度数据。一起接着看下去吧&#xff01; 一、编写脚本 1.1 准备资料 780E开发板 780E开发板设计资料 LuatOS-Air780E-文件系统的使用-程序源码demo TCP/UDP测试服务器 API使用介绍 …

vscode中插件ofExtensions的debug模式也无法查看U、p等openfoam中foam类型的变量

插件介绍&#xff1a; 主要内容如下&#xff1a; 以自编译的$HOME/OpenFOAM-7例&#xff0c;如果OFdebugopt设置为WM_COMPILE_OPTIONDebug&#xff0c;那最终的激活环境的命令为source $HOME/OpenFOAM/OpenFOAM-8/etc/bashrc WM_COMPILE_OPTIONDebug&#xff0c;这时候$FOAM_…

【收藏】Cesium 限制相机倾斜角(pitch)滑动范围

1.效果 2.思路 在项目开发的时候&#xff0c;有一个需求是限制相机倾斜角&#xff0c;也就是鼠标中键调整视图俯角时&#xff0c;不能过大&#xff0c;一般 pitch 角度范围在 0 至 -90之间&#xff0c;-90刚好为正俯视。 在网上查阅了很多资料&#xff0c;发现并没有一个合适的…

【经验分享】私有云运维的知识点

最近忙于备考没关注&#xff0c;有次点进某小黄鱼发现首页出现了我的笔记还被人收费了 虽然我也卖了一些资源&#xff0c;但我以交流、交换为主&#xff0c;笔记都是免费给别人看的 由于当时刚刚接触写的并不成熟&#xff0c;为了避免更多人花没必要的钱&#xff0c;所以决定公…

Please activate LaTeX Workshop sidebar item to render the thumbnail of a PDF

Latex代码中使用pdf图片&#xff0c;无法预览&#xff0c;提示&#xff1a; Please activate LaTeX Workshop sidebar item to render the thumbnail of a PDF 解决办法&#xff1a; 点击左边这个刷新下即可

QT:Widgets中的事件

事件的处理 (1)重新实现部件的paintEvent()、mousePressEvent()等事件处理函数。这是最常用的一种方法&#xff0c;不过它只能用来处理特定部件的特定事件。 (2)重新实现notify()函数。这个函数功能强大&#xff0c;提供了完全的控制&#xff0c;可以在事件过滤器得到事件之前…

Windows如何安装go环境,离线安装beego

一、安装go 1、下载go All releases - The Go Programming Language 通过网盘分享的文件&#xff1a;分享的文件 链接: https://pan.baidu.com/s/1MCbo3k3otSoVdmIR4mpPiQ 提取码: hxgf 下载amd64.zip文件&#xff0c;然后解压到指定的路径 2、配置环境变量 需要新建两个环境…

AI Agent:重塑业务流程自动化的未来力量(2/30)

《AI Agent&#xff1a;重塑业务流程自动化的未来力量》 摘要&#xff1a;整体思路是先介绍 AI Agent 的基本情况&#xff0c;再深入阐述其实现业务流程自动化的方法和在不同领域的应用&#xff0c;接着分析其价值和面临的挑战&#xff0c;最后得出结论&#xff0c;为读者全面…

R语言的数据结构-矩阵

【图书推荐】《R语言医学数据分析实践》-CSDN博客 《R语言医学数据分析实践 李丹 宋立桓 蔡伟祺 清华大学出版社9787302673484》【摘要 书评 试读】- 京东图书 (jd.com) R语言医学数据分析实践-R语言的数据结构-CSDN博客 矩阵是一个二维数组&#xff0c;矩阵中的元素都具有相…

springboot+javafx使用aop切面导致的fx:id不能被注入问题

记录一个我遇到得问题 问题描述 我本来使用AOP切面来进行全局异常管理&#xff0c;但是使用AOP之后fxml中通过fx:id绑定得参数无法被注入 Slf4j Component Aspect public class GlobalExceptionAspect {AfterThrowing(pointcut "execution(* com.shkj.videoclassifica…

STM32 HAL库 + LM2904运算放大器 + ADC + 4-20ma液位传感器:电路设计及代码实现

4-20ma液位传感器在工业自动化和日常应用中非常常见&#xff0c;例如水位监测、液体储罐管理等。本文将结合STM32 HAL库&#xff0c;带你实现一个简单的液位监测demo&#xff0c;从电路设计到代码实现&#xff0c;实现通过单通道ADC采集4-20ma液位传感器的信号&#xff0c;并通…

MongoDB-固定集合(Capped Collection)

在 MongoDB 中&#xff0c;固定集合&#xff08;Capped Collection&#xff09;是一种具有特殊属性的集合。固定集合具有一个固定的最大大小&#xff0c;并且一旦达到该大小时&#xff0c;最早插入的文档将会被自动删除&#xff0c;以便为新的文档腾出空间。固定集合的这种特性…

Vue2 基础

Vue 2 是 Vue.js 的第二个主要版本&#xff0c;于 2016 年发布。它是一个渐进式的 JavaScript 框架&#xff0c;以其简单、灵活、易用性高而广受欢迎。Vue 2 主要专注于构建用户界面&#xff08;UI&#xff09;&#xff0c;并且非常适合用于构建单页应用&#xff08;SPA&#x…

2450.学习周刊-2024年50周

封面 人生五个球 ✍优秀博文 面对老板安排的工作&#xff0c;事事有回应&#xff0c;有必要吗&#xff1f; 职场精英进阶手册&#xff1a;工作推进五原则&#xff0c;让你合理高效地利用时间 上个班而已&#xff0c;千万别畏手畏脚 理解了雷军说的SU7要守正出奇&#xff0…

基于Llamaindex的网页内容爬取实战

目的 本文不关注如何解析网页 html 元素和各种 python 爬虫技术&#xff0c;仅作为一种网页数据的预处理手段进行研究。Llamaindex 也并不是爬虫技术的集大成者&#xff0c;使用它是为了后续的存查一体化。 安装依赖 pip install llama-index-readers-web # pip install llam…

Excel拆分脚本

Excel拆分 工作表按行拆分为工作薄 工作表按行拆分为工作薄 打开要拆分的Excel文件&#xff0c;使用快捷键&#xff08;AltF11&#xff09;打开脚本界面&#xff0c;选择要拆分的sheet&#xff0c;打开Module&#xff0c;在Module中输入脚本代码&#xff0c;然后运行脚本 Su…

go语言zero项目通过Supervisor启动与停用的管理

为了让Go项目通过 Supervisor 启动与重启&#xff0c;您需要确保已经正确安装和配置了 Supervisor。接下来是详细的步骤来配置您的 Go 项目&#xff0c;使其可以通过 Supervisor 管理。 ### 配置 Go 项目 首先&#xff0c;确保您的 Go 项目可以编译成一个可执行文件&#xff…

【ABAP SAP】开发-BUG修补记录_采购申请打印时品名规格品牌为空

项目场景&#xff1a; TCODE:自开发程序ZMMF004 采购申请打印 问题描述 ZMMF004打印的时候&#xff0c;有的采购申请的品名、规格、品牌为空 原因分析&#xff1a; 1、首先我通过写SQL语句查底表来看这几条采购申请本身有无品名、规格、品牌 SQL语句如下&#xff0c;只需修…

汽车租赁系统数据库 E-R 图设计

文章目录 汽车租赁系统数据库 E-R 图设计一、实体&#xff08;Entities&#xff09;二、实体间关系&#xff08;Relationships&#xff09;三、数据表&#xff08;Tables&#xff09; 汽车租赁系统数据库 E-R 图设计 一、实体&#xff08;Entities&#xff09; 用户&#xff0…

【小沐学GIS】基于C++绘制三维数字地球Earth(OpenGL、glfw、glut、QT)第三期

&#x1f37a;三维数字地球系列相关文章如下&#x1f37a;&#xff1a;1【小沐学GIS】基于C绘制三维数字地球Earth&#xff08;456:OpenGL、glfw、glut&#xff09;第一期2【小沐学GIS】基于C绘制三维数字地球Earth&#xff08;456:OpenGL、glfw、glut&#xff09;第二期3【小沐…