初识App Inventor:可视化手机应用开发的基础知识

发布时间: 2024-01-15 22:16:50 阅读量: 105 订阅数: 40
# 1. App Inventor 简介 ## 1.1 什么是App Inventor App Inventor是由Google开发的一款可视化手机应用开发工具,旨在让任何人都可以轻松地创建自己的手机应用。它通过拖拽、组合和配置不同的组件来构建应用,而无需编写繁琐的代码。 ## 1.2 App Inventor 的特点和优势 App Inventor具有以下特点和优势: - 可视化开发:用户无需编写复杂的代码,只需要通过拖拽组件、配置属性、设置事件等简单操作就能创建出强大的应用。 - 开放性和灵活性:App Inventor支持多种平台和设备,并提供了丰富的组件库供开发者使用,可以满足不同需求的应用开发。 - 入门门槛低:相较于传统的应用开发方式,App Inventor的学习曲线较为平缓,即使是没有编程基础的人也能轻松上手。 - 快速迭代和测试:由于可视化开发的特点,开发者可以快速修改和测试应用的功能,提高了开发效率。 ## 1.3 为什么选择App Inventor进行手机应用开发 选择App Inventor进行手机应用开发有以下几个原因: - 简单易学:App Inventor采用可视化开发方式,不需要具备专业的编程知识,即使是初学者也能快速上手。 - 易用性强:App Inventor提供了丰富的组件库和示例代码,开发者可以通过拖拽组件、配置属性等方式来快速构建应用。 - 开发效率高:相较于传统的编程方式,App Inventor的开发效率要高得多。不需要编写大量的代码,可以快速迭代和测试应用。 - 跨平台支持:App Inventor支持多种操作系统和设备,可以开发适配不同平台的应用。 通过以上介绍,我们可以看出App Inventor是一款强大而简单的手机应用开发工具,无论是初学者还是有一定编程基础的开发者都可以使用它来创建自己的应用。在接下来的章节中,我们将详细介绍App Inventor的开发环境搭建、基础知识、高级特性、实战应用以及应用发布与分享等内容,帮助读者更好地掌握和应用这一工具。 # 2. App Inventor 开发环境搭建 App Inventor 是一个用于可视化手机应用开发的工具,但在开始开发应用之前,需要先搭建App Inventor的开发环境。本章将详细介绍App Inventor开发环境的下载、安装、连接设备以及熟悉开发界面和基本操作的步骤。 ### 2.1 下载和安装App Inventor 在开始使用App Inventor之前,需要先下载并安装App Inventor的开发环境。可以在MIT App Inventor的官方网站上找到最新的版本下载链接。根据操作系统的不同,选择相应的下载版本并按照提示进行安装。 ### 2.2 连接手机或虚拟设备 安装完成后,需要将手机或虚拟设备连接到开发环境中。首先确保设备的USB调试功能已经打开,然后使用USB数据线将设备连接到电脑上。 #### 连接手机设备 1. 打开手机的设置菜单。 2. 在设置菜单中找到并点击“开发者选项”。 3. 在开发者选项中找到并打开“USB调试”选项。 #### 连接虚拟设备 1. 在开发环境中,选择“Connect”菜单。 2. 选择“AI Companion”。 3. 扫描显示的二维码或手动输入提供的连接代码。 4. 点击“Connect”按钮,等待连接成功。 ### 2.3 熟悉开发界面和基本操作 成功连接设备后,可以开始熟悉App Inventor的开发界面和基本操作。 #### 开发界面介绍 App Inventor的开发界面主要由以下几个部分组成: - Designer:用于设计应用界面和添加组件。 - Blocks Editor:用于编写应用逻辑和处理事件。 - Palette:包含了各种可用的组件和功能块。 - Viewer:用于预览应用在设备上的效果。 #### 基本操作 - 在Designer中拖拽和放置组件:可以在Palette中选择需要使用的组件,然后拖拽到Designer中的画布上进行放置和布局。 - 在Blocks Editor中编写逻辑:根据应用的需求,在Blocks Editor中拖拽和组合不同的功能块,编写应用的逻辑流程和处理事件的代码。 - 运行和调试应用:点击“Connect”按钮连接设备后,点击“Build”按钮进行应用的构建,然后点击“Package for Phone”按钮将应用安装到手机或虚拟设备上进行预览调试。 以上是App Inventor开发环境搭建的基本步骤,下一章将介绍App Inventor的基础知识,包括逻辑概念、基本组件和简单应用实例演示。 # 3. App Inventor 基础知识 App Inventor是一个基于可视化编程的手机应用开发工具,不需要编写复杂的代码,只需通过拖拽组件、设置属性和连接事件,便可轻松实现手机应用的开发。在本章中,我们将介绍App Inventor的基础知识,包括理解概念、掌握基本组件和实例演示。 #### 3.1 理解App Inventor的逻辑概念 App Inventor的核心在于理解事件驱动的编程模型。在App Inventor中,每一个组件都可以触发特定的事件,比如按钮的点击、屏幕的触摸等。当事件发生时,相应的代码块会被执行,从而实现特定的功能。 下面是一个简单的示例,当按钮被点击时,在屏幕上显示“Hello, World!”: ```java // 按钮点击事件的代码块 Button1.onClick: Label1.Text = "Hello, World!" ``` 在上面的代码中,当Button1被点击时,Label1的文本会被设置为“Hello, World!”。这展示了App Inventor的事件驱动编程方式。 #### 3.2 掌握App Inventor的基本组件 App Inventor提供了丰富的组件库,涵盖了各种常见的手机功能,比如按钮、文本框、图片、传感器等。通过组合这些组件,可以实现各种复杂的功能。 常用的组件包括: - Button(按钮) - Label(标签) - TextBox(文本框) - Image(图片) - Sensor(传感器) #### 3.3 简单的应用实例演示 让我们通过一个简单的实例来演示App Inventor的基本功能。假设我们要制作一个简单的温度转换器应用,用户输入摄氏温度,点击按钮后显示对应的华氏温度。 首先,在App Inventor的界面中拖拽一个TextBox(用于输入摄氏温度)、一个Button(用于触发转换事件)和一个Label(用于显示结果)组件。然后,设置Button的点击事件对应的代码块为: ```java // 按钮点击事件的代码块 Button1.onClick: // 获取输入的摄氏温度 celsiusTemp = TextBox1.Text // 计算对应的华氏温度 fahrenheitTemp = celsiusTemp * 9/5 + 32 // 显示结果 Label1.Text = "华氏温度:" + fahrenheitTemp ``` 通过上面的代码块,当用户输入摄氏温度并点击按钮时,会触发计算并在Label1中显示对应的华氏温度。 在本章中,我们简要介绍了App Inventor的基础知识,包括理解逻辑概念、掌握基本组件和实例演示。在接下来的章节中,我们将深入探讨App Inventor的高级特性和实战应用。 # 4. App Inventor 高级特性 在这一章中,我们将深入探讨App Inventor的高级特性,包括利用传感器和设备功能、使用Web组件实现联网功能以及组合多个组件实现复杂功能。让我们一起来看看吧! #### 4.1 使用传感器和设备功能 在App Inventor中,我们可以轻松地利用手机的各种传感器和设备功能,比如 GPS 定位、加速度传感器、相机等。下面是一个使用加速度传感器的简单示例,当手机晃动时,屏幕上的文字会改变。 ```java import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView; public class SensorActivity extends AppCompatActivity implements SensorEventListener { private SensorManager sensorManager; private Sensor accelerometer; private boolean isShaking = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sensor); sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); sensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL); } @Override public void onSensorChanged(SensorEvent event) { float x = event.values[0]; float y = event.values[1]; float z = event.values[2]; if ((Math.abs(x) > 10 && Math.abs(y) > 10) || (Math.abs(y) > 10 && Math.abs(z) > 10) || (Math.abs(x) > 10 && Math.abs(z) > 10)) { if (!isShaking) { TextView textView = findViewById(R.id.textView); textView.setText("Shaking detected!"); isShaking = true; } } else { if (isShaking) { TextView textView = findViewById(R.id.textView); textView.setText("No shaking"); isShaking = false; } } } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { // 精度变化时的处理 } @Override protected void onPause() { super.onPause(); sensorManager.unregisterListener(this); } } ``` ##### 代码说明: - 首先,我们获取加速度传感器,并注册监听器。 - 当手机晃动时,通过传感器监听器的回调函数`onSensorChanged`来检测手机的加速度,并改变屏幕上的文字。 ##### 结果说明: 当手机被晃动时,屏幕上的文字会显示"Shaking detected!",停止晃动时,文字会改变成"No shaking"。 #### 4.2 利用Web组件实现联网功能 除了使用传感器和设备功能,App Inventor还可以通过Web组件实现与网络的交互。下面是一个使用Web组件来获取网页内容并在应用中显示的示例。 ```python import requests from kivy.app import App from kivy.uix.label import Label class WebContentApp(App): def build(self): response = requests.get("https://example.com") content = response.text return Label(text=content) if __name__ == '__main__': WebContentApp().run() ``` ##### 代码说明: - 我们使用`requests`库来发送GET请求获取网页内容。 - 然后将获取到的内容显示在应用中的标签上。 ##### 结果说明: 运行应用后,会在界面上显示获取到的网页内容。 #### 4.3 组合多个组件实现复杂功能 在App Inventor中,我们可以通过组合多个组件来实现复杂的功能。比如,我们可以将按钮、文本框和列表组合在一起,实现一个交互式的待办事项管理系统。 ```javascript import React, { useState } from 'react'; function TodoApp() { const [todos, setTodos] = useState([]); const [inputValue, setInputValue] = useState(''); const addTodo = () => { setTodos([...todos, inputValue]); setInputValue(''); }; return ( <div> <input type="text" value={inputValue} onChange={(e) => setInputValue(e.target.value)} /> <button onClick={addTodo}>Add</button> <ul> {todos.map((todo, index) => ( <li key={index}>{todo}</li> ))} </ul> </div> ); } export default TodoApp; ``` ##### 代码说明: - 我们使用了React Hooks来实现一个简单的待办事项管理系统。 - 通过`useState`来管理待办事项列表和输入框的状态,以及更新状态的方法。 - 通过按钮的点击事件和输入框的改变事件来添加待办事项和更新输入框的值。 ##### 结果说明: 当在输入框输入待办事项并点击添加按钮时,待办事项会被添加到列表中显示。 在本章中,我们介绍了App Inventor的高级特性,包括传感器和设备功能的利用、Web组件实现联网功能以及多个组件的组合实现复杂功能。希朝这些内容能够帮助你更加深入地了解App Inventor的强大之处。 # 5. App Inventor 实战应用 在本章中,我们将通过实际的应用示例来展示App Inventor的功能和灵活性。我们将开发三个不同的应用,分别是一个简单的计算器应用、一个天气预报应用和一个简易的记账应用。通过这些实例,你将能够加深对App Inventor的理解,并学会如何利用它来构建功能丰富的手机应用。 ### 5.1 开发一个简单的计算器应用 在这个示例中,我们将创建一个简单的计算器应用。该应用将具有基本的加减乘除功能,并显示计算结果。 #### 5.1.1 应用场景 用户可以在应用中输入两个数字和一个操作符,然后点击“计算”按钮,应用将执行相应的数学运算,并显示计算结果。 #### 5.1.2 应用界面设计 在App Inventor的设计界面中,我们需要添加以下组件: - 两个文本输入框,用于输入两个数字; - 一个下拉框组件,用于选择四种基本的数学运算操作符; - 一个按钮组件,用于触发计算操作; - 一个标签组件,用于显示计算结果。 #### 5.1.3 应用代码实现 下面是该应用的代码实现,使用了Python语言编写: ```python # 导入所需模块 from tkinter import * # 创建窗口 window = Tk() window.title("简单计算器") window.geometry("300x200") # 定义计算函数 def calculate(): num1 = float(entry1.get()) num2 = float(entry2.get()) operator = operator_combo.get() if operator == "+": result = num1 + num2 elif operator == "-": result = num1 - num2 elif operator == "*": result = num1 * num2 elif operator == "/": result = num1 / num2 result_label.config(text="计算结果:" + str(result)) # 添加文本框组件 entry1 = Entry(window) entry1.place(x=20, y=20) entry2 = Entry(window) entry2.place(x=150, y=20) # 添加下拉框组件 operator_combo = ttk.Combobox(window, values=["+", "-", "*", "/"]) operator_combo.place(x=100, y=60) operator_combo.current(0) # 添加按钮组件 calculate_button = Button(window, text="计算", command=calculate) calculate_button.place(x=130, y=100) # 添加标签组件 result_label = Label(window, text="计算结果:") result_label.place(x=60, y=150) # 运行窗口 window.mainloop() ``` #### 5.1.4 代码总结 在这个示例中,我们使用了Python的tkinter库来创建一个最基本的GUI窗口。我们添加了文本输入框、下拉框、按钮和标签组件,并为按钮绑定了一个计算函数。根据用户选择的操作符,计算函数执行相应的数学运算,并将结果显示在标签组件中。 #### 5.1.5 结果说明 当用户输入两个数字和选择一个操作符后,点击“计算”按钮,应用将执行相应的数学运算,并在标签组件中显示计算结果。 ### 5.2 制作一个天气预报应用 TODO, 待更新 ### 5.3 开发一个简易的记账应用 TODO, 待更新 通过以上实例,我们可以看到App Inventor是一个非常灵活和易于使用的开发工具,它能够帮助我们快速构建功能强大的手机应用,并且不需要编写复杂的代码。希望这些实例能够帮助你更好地理解和应用App Inventor的各种功能。在接下来的第六章中,我们将讨论如何将应用发布和分享给其他人。 ## 第六章:App Inventor 应用发布与分享 TODO, 待更新 # 6. App Inventor 应用发布与分享 在本章中,我们将学习如何将使用App Inventor开发的应用发布和分享给他人。我们将学习应用打包、上架应用市场或分享给朋友等操作,并且探索更多的App Inventor应用开发资源。 #### 6.1 对应用进行打包 在这一节中,我们将学习如何对我们开发的应用进行打包。打包是将应用程序、资源文件、配置文件等内容打包成一个可执行的文件以便发布和分享。App Inventor提供了方便的打包功能,让我们能够轻松地将应用打包成一个安装包(APK文件)。 ```java // 代码示例 // 这里是打包应用的Java代码示例 public class Main { public static void main(String[] args) { // 打包应用的具体步骤和代码示例 // ... } } ``` **打包应用总结:** 本节我们学习了如何使用App Inventor提供的打包功能,将应用打包成一个安装包以便发布和分享。 #### 6.2 上架应用市场或分享给朋友 在本节中,我们将学习如何将打包好的应用上架到应用市场,或者分享给朋友。上架应用市场能够让更多的人发现并下载使用我们开发的应用,而分享给朋友则能够让我们的朋友圈和社交网络上的人体验我们的应用。 ```java // 代码示例 // 这里是上架应用市场或分享给朋友的Java代码示例 public class Main { public static void main(String[] args) { // 上架应用市场或分享给朋友的具体步骤和代码示例 // ... } } ``` **上架应用市场或分享给朋友总结:** 本节我们学习了如何将打包好的应用上架到应用市场,或者分享给朋友,让更多人能够发现并使用我们的应用。 #### 6.3 探索更多的App Inventor应用开发资源 在这一节中,我们将介绍如何继续探索更多的App Inventor应用开发资源。我们可以通过查阅官方文档、参与社区讨论、阅读相关书籍和文章等途径,不断学习和探索App Inventor的更多功能和应用开发技巧。 ```java // 代码示例 // 这里是探索更多的App Inventor应用开发资源的Java代码示例 public class Main { public static void main(String[] args) { // 探索更多的App Inventor应用开发资源的具体步骤和代码示例 // ... } } ``` **探索更多的App Inventor应用开发资源总结:** 本节我们介绍了继续探索更多的App Inventor应用开发资源的方法,帮助我们不断学习和提升应用开发技能。 在本章中,我们学习了如何将应用打包、上架应用市场或分享给朋友,并且探索更多的App Inventor应用开发资源,这些知识将帮助我们更好地发布和分享我们开发的手机应用。
corwn 最低0.47元/天 解锁专栏
买1年送3个月
点击查看下一篇
profit 百万级 高质量VIP文章无限畅学
profit 千万级 优质资源任意下载
profit C知道 免费提问 ( 生成式Al产品 )

相关推荐

陆鲁

资深技术专家
超过10年工作经验的资深技术专家,曾在多家知名大型互联网公司担任重要职位。任职期间,参与并主导了多个重要的移动应用项目。
专栏简介
《App Inventor - Android移动应用构建:App Inventor可视化开发工具与应用案例》专栏深入介绍了使用App Inventor可视化开发工具构建Android移动应用的全过程。从初识App Inventor,探索基本功能和UI设计,深入研究各种模块和组件,到利用传感器和位置定位功能,数据存储和管理,网络通信,定时器和计数器,甚至构建简单的游戏应用程序等,每一篇文章都围绕着实际案例进行详细讲解。同时,专栏还涵盖了高级功能如自定义模块和函数,通知功能,权限管理及安全配置,多语言支持,界面动画与过渡效果,数据分析与可视化技术应用,以及物联网应用开发等内容。无论是初学者还是有一定经验的开发者,都能在本专栏中找到系统、全面的App Inventor开发指南,帮助他们更好地利用这一可视化工具开发出丰富多彩的Android移动应用。
最低0.47元/天 解锁专栏
买1年送3个月
百万级 高质量VIP文章无限畅学
千万级 优质资源任意下载
C知道 免费提问 ( 生成式Al产品 )

最新推荐

【R语言Capet包集成挑战】:解决数据包兼容性问题与优化集成流程

![【R语言Capet包集成挑战】:解决数据包兼容性问题与优化集成流程](https://www.statworx.com/wp-content/uploads/2019/02/Blog_R-script-in-docker_docker-build-1024x532.png) # 1. R语言Capet包集成概述 随着数据分析需求的日益增长,R语言作为数据分析领域的重要工具,不断地演化和扩展其生态系统。Capet包作为R语言的一个新兴扩展,极大地增强了R在数据处理和分析方面的能力。本章将对Capet包的基本概念、功能特点以及它在R语言集成中的作用进行概述,帮助读者初步理解Capet包及其在

【多层关联规则挖掘】:arules包的高级主题与策略指南

![【多层关联规则挖掘】:arules包的高级主题与策略指南](https://djinit-ai.github.io/images/Apriori-Algorithm-6.png) # 1. 多层关联规则挖掘的理论基础 关联规则挖掘是数据挖掘领域中的一项重要技术,它用于发现大量数据项之间有趣的关系或关联性。多层关联规则挖掘,在传统的单层关联规则基础上进行了扩展,允许在不同概念层级上发现关联规则,从而提供了更多维度的信息解释。本章将首先介绍关联规则挖掘的基本概念,包括支持度、置信度、提升度等关键术语,并进一步阐述多层关联规则挖掘的理论基础和其在数据挖掘中的作用。 ## 1.1 关联规则挖掘

时间数据统一:R语言lubridate包在格式化中的应用

![时间数据统一:R语言lubridate包在格式化中的应用](https://img-blog.csdnimg.cn/img_convert/c6e1fe895b7d3b19c900bf1e8d1e3db0.png) # 1. 时间数据处理的挑战与需求 在数据分析、数据挖掘、以及商业智能领域,时间数据处理是一个常见而复杂的任务。时间数据通常包含日期、时间、时区等多个维度,这使得准确、高效地处理时间数据显得尤为重要。当前,时间数据处理面临的主要挑战包括但不限于:不同时间格式的解析、时区的准确转换、时间序列的计算、以及时间数据的准确可视化展示。 为应对这些挑战,数据处理工作需要满足以下需求:

【R语言caret包多分类处理】:One-vs-Rest与One-vs-One策略的实施指南

![【R语言caret包多分类处理】:One-vs-Rest与One-vs-One策略的实施指南](https://media.geeksforgeeks.org/wp-content/uploads/20200702103829/classification1.png) # 1. R语言与caret包基础概述 R语言作为统计编程领域的重要工具,拥有强大的数据处理和可视化能力,特别适合于数据分析和机器学习任务。本章节首先介绍R语言的基本语法和特点,重点强调其在统计建模和数据挖掘方面的能力。 ## 1.1 R语言简介 R语言是一种解释型、交互式的高级统计分析语言。它的核心优势在于丰富的统计包

机器学习数据准备:R语言DWwR包的应用教程

![机器学习数据准备:R语言DWwR包的应用教程](https://statisticsglobe.com/wp-content/uploads/2021/10/Connect-to-Database-R-Programming-Language-TN-1024x576.png) # 1. 机器学习数据准备概述 在机器学习项目的生命周期中,数据准备阶段的重要性不言而喻。机器学习模型的性能在很大程度上取决于数据的质量与相关性。本章节将从数据准备的基础知识谈起,为读者揭示这一过程中的关键步骤和最佳实践。 ## 1.1 数据准备的重要性 数据准备是机器学习的第一步,也是至关重要的一步。在这一阶

dplyr包函数详解:R语言数据操作的利器与高级技术

![dplyr包函数详解:R语言数据操作的利器与高级技术](https://www.marsja.se/wp-content/uploads/2023/10/r_rename_column_dplyr_base.webp) # 1. dplyr包概述 在现代数据分析中,R语言的`dplyr`包已经成为处理和操作表格数据的首选工具。`dplyr`提供了简单而强大的语义化函数,这些函数不仅易于学习,而且执行速度快,非常适合于复杂的数据操作。通过`dplyr`,我们能够高效地执行筛选、排序、汇总、分组和变量变换等任务,使得数据分析流程变得更为清晰和高效。 在本章中,我们将概述`dplyr`包的基

R语言中的概率图模型:使用BayesTree包进行图模型构建(图模型构建入门)

![R语言中的概率图模型:使用BayesTree包进行图模型构建(图模型构建入门)](https://siepsi.com.co/wp-content/uploads/2022/10/t13-1024x576.jpg) # 1. 概率图模型基础与R语言入门 ## 1.1 R语言简介 R语言作为数据分析领域的重要工具,具备丰富的统计分析、图形表示功能。它是一种开源的、以数据操作、分析和展示为强项的编程语言,非常适合进行概率图模型的研究与应用。 ```r # 安装R语言基础包 install.packages("stats") ``` ## 1.2 概率图模型简介 概率图模型(Probabi

【R语言数据包mlr的深度学习入门】:构建神经网络模型的创新途径

![【R语言数据包mlr的深度学习入门】:构建神经网络模型的创新途径](https://media.geeksforgeeks.org/wp-content/uploads/20220603131009/Group42.jpg) # 1. R语言和mlr包的简介 ## 简述R语言 R语言是一种用于统计分析和图形表示的编程语言,广泛应用于数据分析、机器学习、数据挖掘等领域。由于其灵活性和强大的社区支持,R已经成为数据科学家和统计学家不可或缺的工具之一。 ## mlr包的引入 mlr是R语言中的一个高性能的机器学习包,它提供了一个统一的接口来使用各种机器学习算法。这极大地简化了模型的选择、训练

R语言文本挖掘实战:社交媒体数据分析

![R语言文本挖掘实战:社交媒体数据分析](https://opengraph.githubassets.com/9df97bb42bb05bcb9f0527d3ab968e398d1ec2e44bef6f586e37c336a250fe25/tidyverse/stringr) # 1. R语言与文本挖掘简介 在当今信息爆炸的时代,数据成为了企业和社会决策的关键。文本作为数据的一种形式,其背后隐藏的深层含义和模式需要通过文本挖掘技术来挖掘。R语言是一种用于统计分析、图形表示和报告的编程语言和软件环境,它在文本挖掘领域展现出了强大的功能和灵活性。文本挖掘,简而言之,是利用各种计算技术从大量的

R语言e1071包处理不平衡数据集:重采样与权重调整,优化模型训练

![R语言e1071包处理不平衡数据集:重采样与权重调整,优化模型训练](https://nwzimg.wezhan.cn/contents/sitefiles2052/10264816/images/40998315.png) # 1. 不平衡数据集的挑战和处理方法 在数据驱动的机器学习应用中,不平衡数据集是一个常见而具有挑战性的问题。不平衡数据指的是类别分布不均衡,一个或多个类别的样本数量远超过其他类别。这种不均衡往往会导致机器学习模型在预测时偏向于多数类,从而忽视少数类,造成性能下降。 为了应对这种挑战,研究人员开发了多种处理不平衡数据集的方法,如数据层面的重采样、在算法层面使用不同