Ubuntu TechHive
building-your-first-android-app-in-java.md
使用 Java 构建您的第一个 Android 应用
article.细节

使用 Java 构建您的第一个 Android 应用

reading.进展 18 分钟阅读数

使用 Java 构建您的第一个 Android 应用程序的说明

使用 Java 构建您的第一个 Android 应用

2023 年第四季度全球智能手机销量。

[FR]
Le système d'exploitation Android possède la plus grande base installée parmi les plateformes mobiles à travers le monde. BACKLINKO

  • Début 2024, Android détient une part de marché mondiale de 70,69 %.
  • Aux États-Unis, les iPhones ont une part de marché de 60,77 %.
  • Plus de 3 milliards d'appareils Android sont actuellement actifs.
  • Les smartphones Android ont représenté 56 % des ventes mondiales de smartphones au quatrième trimestre 2023.

历史

  • Android 由 开放手机联盟 (Open Handset Alliance) 创建,该联盟由 Google 领导。
  • 2008 年 8 月 18 日,Android 0.9 SDK 测试版发布。
  • 2008 年 12 月 5 日,Google 发布了第一款 Android 开发手机 (Android Dev Phone)。

[FR]
Historique

  • Android a été créé par la Open Handset Alliance, dirigée par Google.
  • Le 18 août 2008, la version bêta du SDK Android 0.9 a été lancée.
  • Le 5 décembre 2008, Google a annoncé le premier téléphone pour développeurs Android (Android Dev Phone).

Android 操作系统组件:

Linux 内核: Android 操作系统的核心基于 Linux 内核,该内核使用 C 和 C++ 编写。 原生库: Android 系统的许多核心组件和服务都是使用 C 和 C++ 编写的原生代码构建的。这些原生库提供了基本功能,并通过 Java API 暴露给开发者。 Android 运行时 (ART): Android 运行时 (ART) 及其前身 Dalvik 负责运行 Android 应用程序。这些运行时执行从 Java 源代码或 Kotlin 编译而来的字节码。 Java API 框架: 更高级别的 API 和应用程序框架是用 Java 编写的。这允许开发者使用 Java 编写 Android 应用程序,然后将其编译为字节码并在 Android 运行时上运行。

[FR] \\

Linix Kernel : Le cœur du système d'exploitation Android est basé sur le noyau Linux, écrit en C et C++. Bibliothèques natives : De nombreux composants et services essentiels d'Android sont construits avec du code natif en C et C++, accessibles via des API Java. Android Runtime (ART) : ART, et son prédécesseur Dalvik, exécutent les applications Android en bytecode, compilé à partir de code Java ou Kotlin. Framework d'API Java : Les API et frameworks de plus haut niveau sont écrits en Java, permettant aux développeurs d'écrire des applications exécutées sur l'Android Runtime.

Android 操作系统是 开源的

  • 可自由用于修改和重新分发。
  • CyanogenMod 是流行的开源 Android 发行版之一。
  • 局限性:闭源的 Google 应用程序,例如 Google Play 和 Google GPS 导航。

[FR]
Le système d'exploitation Android est open source.

  • Disponible librement pour modifications et redistribution.
  • CyanogenMod est l'une des redistributions open source populaires d'Android.
  • Limites : Applications propriétaires de Google comme Google Play et la navigation GPS de Google restent fermées.

Java 在 Android 开发中的作用。Java 是 Android 开发的首选语言之一,原因如下:

  • Java 是一种面向对象编程 (OOP) 语言: Java 的 OOP 原则使得管理和维护复杂的代码库变得更加容易。这种模块化方法允许开发者创建可重用且可扩展的代码。
  • 平台无关性: Java 的“一次编写,到处运行”能力确保了用 Java 编写的代码可以在任何支持 Java 虚拟机 (JVM) 的设备上运行。这种跨平台兼容性是 Android 开发的一大优势。
  • 健壮且安全: Java 以其健壮性和安全特性而闻名。它包含强大的内存管理、异常处理和全面的安全框架,非常适合开发安全的 Android 应用程序。
  • 丰富的库和工具: Java 提供了丰富的库和开发工具,简化了开发过程。这些库提供了预构建的功能,减少了从零开始编写代码的需求。
  • 性能: Java 的性能针对 Android 开发进行了优化。即时 (JIT) 编译器和高效的垃圾回收机制有助于 Android 应用程序的流畅运行。
  • 现有的开发者基础: Java 是一种已经广泛使用且众所周知的编程语言,拥有庞大的开发者社区。这意味着有现成的人才储备熟悉 Java,使 Google 更容易吸引开发者加入 Android 平台。
  • Sun Microsystems 的支持: 当时,Java 的最初创建者 Sun Microsystems 积极鼓励采用 Java,并与 Google 达成协议,允许在 Android 中使用 Java。这种支持是 Google 做出决定的重要因素。

[FR]
- JAVA est un langage de programmation orienté objet (OOP) : Les principes OOP de Java facilitent la gestion et la maintenance des bases de code complexes, permettant un code modulaire, réutilisable et évolutif. - Indépendance de la plateforme : La capacité "Write Once, Run Anywhere" de Java garantit que le code peut s'exécuter sur tout appareil prenant en charge la JVM, offrant une compatibilité multiplateforme avantageuse pour le développement Android. - Robuste et sécurisé : Java est réputé pour sa gestion mémoire, sa gestion des exceptions et son cadre de sécurité complet, idéal pour des applications Android sécurisées. - Bibliothèques et outils étendus : Java propose un ensemble riche de bibliothèques et d'outils facilitant le développement. - Performance : Java est optimisé pour Android grâce au compilateur JIT et à une gestion efficace de la mémoire, assurant une performance fluide des applications. - Base de développeurs existante : Java était déjà un langage populaire, avec une grande communauté, facilitant ainsi l'adoption par les développeurs pour la plateforme Android. - Soutien de Sun Microsystems : À l'époque, Sun Microsystems, créateur de Java, encourageait activement son adoption et avait un accord avec Google pour son utilisation dans Android.

Android 应用开发的先决条件

基本编程知识:

  • 熟悉编程概念和语言,如 Java 或 Kotlin。
  • 理解面向对象编程 (OOP) 原则。
  • 对用于设计 Android 用户界面的 XML (可扩展标记语言) 有基本了解。

[FR] \\

  • Familiarité avec des concepts de programmation et des langages tels que Java ou Kotlin.
  • Compréhension des principes de la programmation orientée objet (OOP).
  • Compréhension basique du XML (eXtensible Markup Language) pour la conception d'interfaces utilisateur dans Android.
graph TD
    A[用户] -->|用户与视图交互| B[视图]
    B -->|请求处理| C[控制器]
    C -->|请求模型提供数据| D[模型]
    D -->|从数据库请求数据| E[(数据库)]
    E -->|来自数据库的响应| D
    D -->|返回数据| C
    C -->|渲染内容| B
    B -.-> A

    %% 颜色和样式增强
    style A fill:#f9c1c1,stroke:#333,stroke-width:2px
    style B fill:#ffff99,stroke:#333,stroke-width:2px
    style C fill:#d9f9a1,stroke:#333,stroke-width:2px
    style D fill:#a1c1f9,stroke:#333,stroke-width:2px
    style E fill:#ff9999,stroke:#333,stroke-width:2px

    %% 分离用户和数据库
    subgraph 用户交互
        A
        B
    end

    subgraph 后端
        C
        D
        E
    end

开发环境:

这是一个很好的 YouTube 视频教程,用于安装 Android Studio:Android Studio + SDK 配置

  • Android Studio: 下载并安装最新版本的 Android Studio,这是 Android 开发的官方集成开发环境 (IDE)。
  • Android SDK: 出现提示时,安装 Android 软件开发工具包 (SDK)。Android SDK 是开发 Android 应用程序所必需的库和软件开发工具的集合。每当 Google 发布 Android 软件的新版本或更新时,相应的 SDK 也会随之发布。您也可以通过以下步骤安装更新的版本:

    • 打开 Android Studio -> 点击 Tools -> 点击 SDK Manager 并安装您选择的任何版本。
  • 设置模拟器:

    • 点击 Tools -> Device Manager -> Add new Device -> 创建虚拟设备
    • 按照提示操作。
  • 使用物理设备: 或者,您可以通过启用开发者选项和 USB 调试来使用物理 Android 设备进行测试。

    • 点击 Settings -> About …
    • 连续快速点击 Build number 七次(当您接近启用该模式时,会出现弹出消息)。
    • 进入开发者选项并启用 USB 调试。

[FR] \\

C'est un excellent tutoriel vidéo YouTube pour installer Android Studio : Android Studio + Configurations SDK

  • Android Studio : Téléchargez et installez la dernière version d'Android Studio, l'IDE officiel pour le développement Android.
  • Android SDK : Lorsque vous y êtes invité, installez le kit de développement logiciel Android (SDK). Vous pouvez installer des versions plus récentes en suivant ces étapes :

    • Ouvrez Android Studio -> Cliquez sur Outils -> SDK Manager et installez la version souhaitée.
  • Configurer un émulateur :

    • Cliquez sur Outils -> Gestionnaire de périphériques -> Ajouter un nouvel appareil -> créer un appareil virtuel.
  • Utiliser un appareil physique : Activez les options de développeur et le débogage USB.

入门

理解 Android 项目结构

  • App 模块: 包含应用源代码、资源和应用级设置(如 AndroidManifest.xml 和 build.gradle 文件)的主模块。创建新项目时,默认的 app 模块命名为“app”。
  • Library 模块: (项目视图模式) 外部库,包含可作为依赖项在其他应用模块或项目中使用的可重用代码。它生成一个 Android 归档 (AAR) 文件。
  • 项目文件:

    • build.gradle:包含插件声明和所有子项目通用配置的根构建文件。
    • settings.gradle:包含全局构建信息,包括项目名称和要包含的子项目。
    • local.properties:包含与本地机器相关的属性,例如 Android SDK 位置(已从源代码控制中排除),您也可以在此处添加 API 密钥。
  • 目录结构:

    • src/main/AndroidManifest.xml:声明有关应用的基本信息,包括组件和权限。
    • src/main/java:包含应用的 Java 或 Kotlin 源代码。
    • src/main/res:包含布局、可绘制对象和字符串等资源文件。

[FR] \\

Comprendre la structure du projet Android

  • Module App : Le module principal contenant le code source, les ressources et les paramètres de l'application (AndroidManifest.xml, build.gradle).
  • Module Bibliothèque : (Mode Vue Projet) Contient du code réutilisable sous forme de fichier AAR.
  • Fichiers du Projet :

    • build.gradle, settings.gradle, local.properties.
  • Structure des Dossiers :

    • src/main/AndroidManifest.xml
    • src/main/java
    • src/main/res

有关更详细的信息,请参阅原始文档。

理解 Android 组件

  • 活动 (Activities): 活动代表具有用户界面的单个屏幕。它们是与用户交互的入口点。Fragment 拥有自己的生命周期,与宿主活动的生命周期紧密相关。这允许更好地控制 UI 组件及其状态管理。

[FR] \\

Comprendre les composants Android

  • Activités : Les activités représentent une seule interface utilisateur et sont le point d'entrée pour interagir avec l'utilisateur. Les fragments ont leur propre cycle de vie, étroitement lié à celui de l'activité hôte, ce qui permet un meilleur contrôle des composants UI et de leur gestion d'état.

有关更多详细信息,您可以参考原始文档或 Android 架构指南。

public class MainActivity extends AppCompatActivity {
  // 活动代码
}
Fragments: Fragments introduce modularity into your apps UI by letting you divide the UI into discrete chunks. This makes it easier to manage and reuse components across different parts of your app.
  • Fragment: Fragment 通过允许您将 UI 分割成离散的块,将模块化引入到您的应用 UI 中。这使得在应用的不同部分管理和重用组件变得更加容易。

[FR] \\

  • Fragments: : Les fragments introduisent la modularité dans l'interface utilisateur de votre application en vous permettant de diviser l'interface en blocs distincts. Cela facilite la gestion et la réutilisation des composants dans différentes parties de l'application.
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.fragment_container, new ExampleFragment());
transaction.addToBackStack(null);
transaction.commit();
  • 服务 (Services): 服务在后台运行,以执行长时间运行的操作或为远程进程执行工作。示例:音乐播放器应用可能会使用服务在用户使用其他应用时在后台播放音乐。

[FR] \\

  • Services : Les services s'exécutent en arrière-plan pour effectuer des opérations de longue durée ou des tâches pour des processus distants. Exemple : Une application de lecteur de musique peut utiliser un service pour jouer de la musique en arrière-plan pendant que l'utilisateur utilise une autre application.
public class MusicService extends Service {
  // 服务代码
}
  • 内容提供者 (Content Providers): 内容提供者管理对结构化数据集的访问。它们封装数据并提供定义数据安全的机制。简而言之,内容提供者是 Android 允许应用与其他应用共享数据的方式。示例:存储用户联系人的应用可能会使用内容提供者来管理联系人数据。

[FR] \\

  • Content Providers : Les content providers gèrent l'accès à un ensemble structuré de données. Ils encapsulent les données et fournissent des mécanismes pour définir la sécurité des données. En résumé, un Content Provider permet aux applications Android de partager leurs données avec d'autres applications. Exemple : Une application qui stocke les contacts d'un utilisateur peut utiliser un content provider pour gérer ces données de contact.
public class ContactsProvider extends ContentProvider {
  // 提供者代码
}
  • 广播接收器 (Broadcast Receivers): 广播接收器响应系统范围的广播公告。它们使应用能够监听来自系统或其他应用的特定广播消息。示例:应用可能会使用广播接收器来检测设备电量何时不足。

[FR] \\

  • Broadcast Receivers : Les broadcast receivers réagissent aux annonces système globales. Ils permettent à l'application d'écouter des messages spécifiques du système ou d'autres applications. Exemple : Une application peut utiliser un broadcast receiver pour détecter lorsque la batterie de l'appareil est faible.
batteryLevel = new BatteryLevel();
mContext.registerReceiver(batteryLevel, new IntentFilter(Intent.ACTION_BATTERY_LOW));
  • 意图 (Intents): 意图是用于请求其他应用组件执行操作的消息对象。它们促进了不同组件之间的通信。示例:意图可用于启动新活动或发送广播。

[FR] \\

  • Intents : Les intents sont des objets de messagerie utilisés pour demander une action à un autre composant de l'application. Ils facilitent la communication entre différents composants. Exemple : Un intent peut être utilisé pour démarrer une nouvelle activité ou envoyer une diffusion (broadcast).
Intent intent = new Intent(this, NewActivity.class);
startActivity(intent);
  • 布局 (Layouts): 布局是容器,以特定方式容纳和排列视图。它们定义了 UI 组件的结构和定位。常见布局:

    • LinearLayout:将视图排列成单行或单列。
    • RelativeLayout:相对于彼此或父容器定位视图。
    • ConstraintLayout:一种灵活的布局,允许您创建具有扁平视图层次结构的复杂布局。
    • FrameLayout:一种简单的布局,将视图堆叠在一起。
    • GridLayout:以网格格式排列视图。
    • 布局编辑器:使用 Android Studio 中的布局编辑器直观地设计您的 UI。从面板中拖放 UI 组件,并使用属性面板配置其属性。
  • 视图 (Views): 视图是 Android 用户界面的基本构建块。它们代表用户与之交互的 UI 组件,例如按钮、文本字段、图像等。常见视图:

    • TextView:向用户显示文本。
    • Button:可点击的按钮。
    • ImageView:显示图像。
    • EditText:用于用户输入的文本字段。
    • ListViews
    • RecyclerView:用于在可滚动列表中显示大数据集的灵活视图。
    • ListViews 和 Adapters:ListViews 是用于在列表中显示项目的 Android 元素。Adapters 用于将数据数组绑定到 ListView。它是一个可以处理单个项目列表的简单适配器。

[FR] \\

  • Layouts : Les layouts sont des conteneurs qui organisent et disposent les vues dans une interface utilisateur.

    • LinearLayout : Dispose les vues en une seule ligne ou colonne.
    • RelativeLayout : Positionne les vues les unes par rapport aux autres ou au conteneur parent.
    • ConstraintLayout : Permet des mises en page complexes.
    • FrameLayout : Empile les vues les unes sur les autres.
    • GridLayout : Organise les vues en grille.
  • Views : Composants de base de l'interface utilisateur, comme
  • TextView : Affiche du texte à l'utilisateur.
  • Button : Un bouton cliquable.
  • ImageView : Affiche une image.
  • EditText : Un champ de texte pour la saisie de l'utilisateur.
  • ListView : Affiche une liste d'éléments.
  • RecyclerView : Vue flexible pour afficher de grandes séries de données dans une liste défilante.
  • ListViews et Adapters : ListViews sont utilisés pour afficher des listes, et les Adapters lient les données à cette liste.
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, dataArray);
listView.setAdapter(adapter);
public class CustomAdapter extends BaseAdapter {
  // 自定义适配器的实现
}

基本 UI 设计

  • XML 布局:使用 XML 进行设计。

    
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    
    
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Hello, World!" />
    
    
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Click Me" />
    
  • Material Design 原则介绍: Material Design 是 Google 开发的一种设计系统,旨在跨各种平台(包括 Android、iOS、Flutter 和 Web)创建高质量的数字体验。它的灵感来自物理世界及其纹理,结合了印刷设计的原则,以创造一种连贯且沉浸式的用户体验。使用 Material Design

    • 将 Material 组件添加到您的项目中:打开您的 build.gradle 文件并添加以下依赖项:

[FR]
Introduction aux principes du Material Design : Material Design est un système de conception développé par Google pour créer des expériences numériques de haute qualité sur Android, iOS, Flutter et le web. Inspiré du monde physique et des textures, il incorpore des principes du design imprimé pour offrir une expérience utilisateur immersive.

  • Ajouter des composants Material à votre projet : Ouvrez votre fichier `build.gradle` et ajoutez la dépendance suivante :
implementation 'com.google.android.material:material:1.4.0'

更新您的应用主题:

 name="AppTheme" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
    
     name="colorPrimary">@color/primary
     name="colorPrimaryVariant">@color/primaryVariant
     name="colorOnPrimary">@color/onPrimary
     name="colorSecondary">@color/secondary

在您的布局中使用 Material 组件。示例 Material 按钮


    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Material Button" />

处理用户输入:示例按钮。

XML


    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Material Button" />

JAVA

MaterialButton button = findViewById(R.id.materialButton);
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // 处理按钮点击
    }
});

使用数据

  • 使用 SharedPreferences 管理数据: SharedPreferences 是一种将少量数据存储为键值对的简单方法。 [FR] \\
  • Gérer les données avec SharedPreferences : SharedPreferences est un moyen simple de stocker de petites quantités de données sous forme de paires clé-valeur. Cela permet de sauvegarder des préférences d'utilisateur ou des paramètres de l'application de manière persistante.

    获取 SharedPreferences 实例:

    SharedPreferences sharedPreferences = getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);

    将数据保存到 SharedPreferences:

    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putString("key", "value");
    editor.apply();

    从 SharedPreferences 检索数据:

    String value = sharedPreferences.getString("key", "default_value");
  • Android 网络基础(使用 REST API)
  • Android 权限介绍

    <uses-permission android:name="android.permission.INTERNET" />
  • Retrofit
  • OkHttp3 使用 OkHttp3:将 OkHttp3 依赖项添加到您的 build.gradle 文件中:
  implementation 'com.squareup.okhttp3:okhttp:4.9.1'

进行网络请求 您可以使用 OkHttp3 进行同步和异步网络请求。以下是如何执行 GET 请求的示例:

同步 GET 请求

  OkHttpClient client = new OkHttpClient();
  Request request = new Request.Builder()
      .url("https://api.example.com/data")
      .build();

  try (Response response = client.newCall(request).execute()) {
      if (response.isSuccessful()) {
          String responseData = response.body().string();
          // 处理响应
      }
  } catch (IOException e) {
      e.printStackTrace();
  }

异步 GET 请求

  OkHttpClient client = new OkHttpClient();
  Request request = new Request.Builder()
      .url("https://api.example.com/data")
      .build();

  client.newCall(request).enqueue(new Callback() {
      @Override
      public void onFailure(Call call, IOException e) {
          e.printStackTrace();
      }

      @Override
      public void onResponse(Call call, Response response) throws IOException {
          if (response.isSuccessful()) {
              String responseData = response.body().string();
              // 处理响应
          }
      }
  });

理解 Android 活动生命周期

  • onCreate()

调用时机: 活动首次创建时。 目的: 初始化活动。这是您应该执行一次性设置程序的地方,例如创建 UI、初始化变量以及将数据绑定到列表。 示例:

[FR]
Appelée lorsque : L'activité est créée pour la première fois. But : Initialiser l'activité. C'est ici que vous devez effectuer les procédures de configuration uniques, telles que la création de l'interface utilisateur, l'initialisation des variables, et le binding des données aux listes. Exemple :

@Override
 protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);
     // 在此处初始化组件
 }
  • onStart()

调用时机: 活动对用户可见时。 目的: 准备活动进入前台并变得可交互。 示例:

[FR]
Appelée lorsque : L'activité devient visible pour l'utilisateur. But : Préparer l'activité à entrer au premier plan et à devenir interactive. Exemple :

 @Override
 protected void onStart() {
     super.onStart();
     // 执行使活动可见的任务
 }
  • onResume()

调用时机: 活动开始与用户交互时。 目的: 恢复任何暂停的 UI 更新、动画或其他正在进行的操作。

[FR]
Appelée lorsque : L'activité commence à interagir avec l'utilisateur. But : Reprendre les mises à jour de l'interface utilisateur en pause, les animations ou d'autres actions en cours.

@Override
protected void onResume() {
        super.onResume();
        // 恢复与用户的交互
}
  • onDestroy()

调用时机: 活动即将被销毁时。 目的: 清理任何需要释放的资源,例如线程或数据库连接。

[FR]
Appelée lorsque : L'activité est sur le point d'être détruite. But : Nettoyer toutes les ressources, telles que les threads ou les connexions à la base de données, qui doivent être libérées.

@Override
protected void onDestroy() {
        super.onDestroy();
        // 清理资源
}

Android Java 介绍

与 Android 开发相关的 Java 基本概念 (OOP、类、方法)

  • 面向对象编程 (OOP) OOP 是一种基于“对象”概念的编程范式,对象可以包含数据和代码。 OOP 的主要原则是:

    • 封装:将操作数据的字段(数据)和方法(函数)捆绑到一个单元或类中。
    • 继承:基于现有类创建新类,允许代码重用并创建类之间的层次关系。
    • 多态:允许将对象视为其父类的实例而不是其实际类,从而使一个接口可用于一类通用的操作。
    • 抽象:隐藏复杂的实现细节,只显示对象的必要特征。
  • 类和对象

类: 创建对象的蓝图。它通过将数据和操作数据的方法捆绑到一个单元中来定义数据类型。

[FR] \\

Concepts de base de Java pertinents pour le développement Android (POO, classes, méthodes)

  • Programmation orientée objet (POO) : Un paradigme basé sur les « objets », qui contiennent des données et du code. Les principaux principes de la POO sont :

    • Encapsulation : Regrouper les données et méthodes dans une seule unité (classe).
    • Héritage : Créer de nouvelles classes à partir de classes existantes.
    • Polymorphisme : Permettre aux objets d'être traités comme des instances de leur classe parente.
    • Abstraction : Cacher les détails complexes et montrer uniquement les fonctionnalités essentielles.
  • Classes et Objets Classe : Un modèle pour créer des objets, définissant des données et des méthodes.
public class Car {
        // 字段
        private String color;
        private String model;

        // 构造函数
        public Car(String color, String model) {
            this.color = color;
            this.model = model;
        }

        // 方法
        public void displayInfo() {
            System.out.println("Car model: " + model + ", Color: " + color);
        }
    }

对象: 类的实例。它是使用 new 关键字创建的。

[FR]
Objet : Une instance d'une classe. Il est créé en utilisant le mot-clé `new`.

    Car myCar = new Car("Red", "Toyota");
    myCar.displayInfo(); // 输出: Car model: Toyota, Color: Red

方法: 方法是在类中定义的函数,描述了从该类创建的对象的行为。

[FR]
Méthodes : Les méthodes sont des fonctions définies à l'intérieur d'une classe qui décrivent les comportements des objets créés à partir de cette classe.

      public class Calculator {
          // 相加两个数字的方法
          public int add(int a, int b) {
              return a + b;
          }

          // 相减两个数字的方法
          public int subtract(int a, int b) {
              return a - b;
          }
      }
  • 与 Android 开发的相关性
  • 活动: (继承) 在 Android 中,活动代表具有用户界面的单个屏幕。每个活动都作为 Activity 类的子类实现。
  • XML 布局: (抽象) 定义 UI 元素及其属性。这些布局链接到活动。
  • 意图: 用于启动活动或在组件之间进行通信。
  • AsyncTask: (抽象) 有助于执行后台操作并更新 UI 线程。
  • Android 中的事件处理。 Android 中的事件处理涉及管理用户与应用 UI 组件的交互。以下是您需要了解的关键概念和方法: 事件监听器和处理程序 事件监听器是 View 类中的接口,包含回调方法。当用户与注册了监听器的 UI 组件交互时,会调用这些方法。事件处理程序是处理这些事件的方法。常见的事件监听器和处理程序: OnClickListener OnLongClickListener
  • 什么是接口? Java 中的接口是一种引用类型,类似于类,只能包含常量、方法签名、默认方法、静态方法和嵌套类型。接口不能包含实例字段或构造函数。它们用于指定类必须实现的一组方法。

[FR]
Pertinence pour le développement Android :

  • Activités : (Héritage) Une activité représente un écran et est une sous-classe de la classe `Activity`.
  • Layouts XML :(Abstraction)* Définit les éléments UI, reliés aux activités.
  • Intents: Utilisés pour lancer des activités ou communiquer entre composants.
  • AsyncTask :(Abstraction) Permet d'effectuer des opérations en arrière-plan tout en mettant à jour le thread UI.

Gestion des événements en Android :* Utilise des auditeurs comme `OnClickListener` pour capturer les interactions utilisateur.

Interface : Type de référence définissant un ensemble de méthodes qu'une classe doit implémenter. 创建接口

public interface MyInterface {
        void myMethod();
    }

实现接口 实现接口的类必须提供接口中声明的所有方法的实现:

public class MyClass implements MyInterface {
        @Override
        public void myMethod() {
            // myMethod 的实现
        }
    }

Android 中的常见用例

  • 事件处理:示例:OnClickListener
  • 回调:接口用于创建回调方法。例如,您可以定义一个接口来处理 Fragment 与其父活动之间的通信。

[FR]
Cas d'utilisation courants dans Android :

  • Gestion des événements : Exemple : `OnClickListener` pour capturer des clics sur des éléments de l'interface utilisateur.
  • Callbacks : Les interfaces sont utilisées pour créer des méthodes de rappel. Par exemple, une interface peut être définie pour gérer la communication entre un fragment et son activité parente.

构建披萨搜索应用

  • 应用关键功能的逐步演练。
  • 使用 API 和 AI 搜索披萨。

[FR] \\

  • Fonctionnalités principales étape par étape : Un aperçu détaillé des fonctionnalités principales de l'application.
  • Utilisation d'une API et de l'IA pour rechercher des pizzas : L'application intègre une API et une intelligence artificielle pour faciliter la recherche de pizzas.

测试和调试

  • 使用 Android 模拟器。
  • 调试常见问题

[FR] \\

  • Utilisation de l'émulateur Android : Permet de tester des applications sur un appareil virtuel sans nécessiter de matériel physique.
  • Débogage des problèmes courants : Résolution des erreurs et des dysfonctionnements fréquents lors du développement et des tests d'applications Android.

部署您的应用

  • 在物理设备上运行您的应用。
  • 发布基础知识(Google Play 商店介绍)。Youtube

    • 创建开发者帐户: 在 Google Play Console 上注册开发者帐户。
    • 准备发布您的应用: 构建应用的发布版本。
    • 商店列表: 提供应用标题、描述、截图和宣传图等详细信息。
    • 应用发布: 选择您想要发布应用的方式(alpha、beta 或生产)。
    • 内容分级: 完成内容分级问卷。
    • 定价与分发: 设置价格和分发选项。
    • 应用内容: 添加任何其他内容,如应用内购买或广告。
    • 应用发布: 上传 APK 文件并发布您的应用。

[FR]
Exécuter votre application sur un appareil physique. Principes de base de la publication (introduction au Google Play Store).** Youtube

  • Créer un compte développeur : Inscrivez-vous sur Google Play Console.
  • Préparer l'application : Construire la version de production.
  • Liste de l'application : Fournir titre, description, captures d'écran, etc.
  • Publication : Choisissez entre alpha, bêta, ou production.
  • Évaluation de contenu : Remplir le questionnaire.
  • Tarification et distribution : Fixez le prix et les options de distribution.
  • Contenu de l'application : Ajoutez des achats intégrés ou des publicités.
  • Publiez : Téléchargez le fichier APK et publiez.

最终应用演示

  • 演示披萨搜索应用的实际操作。
  • 讨论潜在的增强功能和后续步骤。

    • 应用内购买:(Google Pay | 信用卡 | Orange Money | 等)
    • 清空购物车
    • 允许用户使用语音完成所有应用操作。

[FR] \\

  • Démonstration de l'application de recherche de pizza en action.
  • Discussion sur les améliorations potentielles et les prochaines étapes :

    • Achat intégré : (Google Pay | Cartes de crédit | Orange Money | etc.)
    • Vider le panier.
    • Permettre aux utilisateurs d'effectuer toutes les actions de l'application avec leur voix.

Android 垃圾回收 Android 垃圾回收 Augusto Herbel 的精彩文章

  • 垃圾回收 (GC) 介绍

    • GC 是一种自动内存管理形式。
    • 主要目标是回收不再使用的对象所占用的内存。
  • Android 中 GC 的演变

    • Dalvik VM:Android 的早期版本使用 Dalvik VM,它具有简单的 GC 机制。
    • ART (Android 运行时):在 Android 5.0 (Lollipop) 中取代了 Dalvik,具有更高效的 GC 算法。
  • GC 算法

    • 标记-清除 (Mark-and-Sweep):识别并标记活动对象,然后清除以回收未标记对象占用的内存。
    • 分代 GC:将对象分为几代(年轻代和老年代)以优化 GC 性能。
  • GC 触发器

    • GC 可以由各种事件触发,例如内存分配失败或达到预定义的内存限制。
  • 对性能的影响

    • GC 可能会导致应用程序执行暂停,从而导致性能问题,如卡顿(UI 无响应)。
    • ART 中的优化旨在最大限度地减少这些暂停并提高整体性能。
  • 开发者最佳实践

    • 尽量减少对象创建,并在可能的情况下重用对象。最佳实践:避免创建不必要的对象,以减少垃圾回收器的工作量。示例:不要在循环中创建新的 String 对象,而是使用 StringBuilder 来连接字符串。

[FR]
Introduction à la collecte des ordures (GC)

  • La GC est une forme de gestion automatique de la mémoire.
  • Objectif principal : récupérer la mémoire occupée par des objets inutilisés.

Évolution de la GC dans Android

  • Dalvik VM : Versions Android précoces, GC simple.
  • ART (Android Runtime) : Remplace Dalvik avec des algorithmes GC plus efficaces.

Algorithmes GC

  • Mark-and-Sweep : Marque les objets vivants et libère la mémoire des non-marqués.
  • GC générationnel : Divise les objets par génération pour optimiser la performance.
    // 低效
    for (int i = 0; i < 1000; i++) {
        String result = "Number: " + i;
    }

    // 高效
    StringBuilder builder = new StringBuilder();
    for (int i = 0; i < 1000; i++) {
        builder.append("Number: ").append(i);
    }
    String result = builder.toString();
    // 低效
    Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);

    // 高效
    Bitmap bitmap = bitmapPool.get(width, height, Bitmap.Config.ARGB_8888);

使用内存分析工具来识别和修复内存泄漏。最佳实践:定期使用内存分析工具来识别和修复内存泄漏。示例:使用 Android Studio 的 Memory Profiler 来监控应用的内存使用情况并检测内存泄漏。View -> Tool Windows -> Profiler,然后选择内存使用情况。 避免内存泄漏 最佳实践:确保对象不会被无意中保留,从而导致内存泄漏。示例:对不应阻止垃圾回收的对象使用 WeakReference。

[FR]
Utiliser les outils de profilage de mémoire pour identifier et corriger les fuites de mémoire :

  • Bonne pratique : Utilisez régulièrement des outils de profilage pour détecter et résoudre les fuites de mémoire.
  • Exemple : Utilisez le Memory Profiler d'Android Studio pour surveiller l'utilisation de la mémoire de votre application. Chemin : View -> Tool Windows -> Profiler, puis sélectionnez Memory Usage.

Éviter les fuites de mémoire :*

  • Bonne pratique : Assurez-vous que les objets ne sont pas retenus involontairement.
  • Exemple : Utilisez WeakReference pour les objets qui ne doivent pas empêcher la collecte des ordures.
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inSampleSize = 4; // 降采样 4 倍
    Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.large_image, options);

避免使用静态引用 最佳实践:避免使用静态引用以防止内存泄漏。示例:不要使用对 Activity 的静态引用,而是使用 WeakReference。

[FR]
Éviter l'utilisation de références statiques : Bonne pratique : Ne pas utiliser de références statiques pour éviter les fuites de mémoire. Exemple : Au lieu d'utiliser une référence statique à une Activity, utilisez une WeakReference afin que l'activité puisse être collectée par le ramasse-miettes une fois qu'elle n'est plus nécessaire.

// 低效
    private static Activity activity;

    // 高效
    private static WeakReference<Activity> activityRef;