当前位置: 首页 > news >正文

Android Studio:Application 和 Activity的区别

ApplicationActivity 是 Android 中非常重要的两个组件,它们分别负责不同的生命周期管理和应用的不同层次的操作。

  • Application应用级别的生命周期管理,它在整个应用运行时只有一个实例,负责应用的全局初始化和资源管理。
  • Activity界面级别的生命周期管理,负责单个界面的显示和用户交互,具有较短的生命周期,随用户操作频繁变化。

下面是它们的主要区别:

1. 生命周期差异:

Application 类:
  • 生命周期Application 类的生命周期与整个应用的生命周期相同。当应用启动时,Application 会被创建,并在应用的整个运行过程中存在,直到应用被退出或系统回收。也就是说,Application 的生命周期只会执行一次。

  • 关键方法

    • onCreate():在应用启动时调用,适合进行全局的初始化操作,如初始化第三方库、全局资源、设置一些全局变量等。
    • onTerminate():当应用退出时调用(但在大部分设备上不会调用,主要用于模拟器)。

    例如:Application 可以用于在全局范围内维护数据、处理全局配置或管理网络请求的工具类。

Activity 类:
  • 生命周期Activity 类的生命周期与用户的交互紧密相关,每次用户启动新的 Activity 时,都会经历一系列生命周期方法的调用。每次 Activity 的创建、暂停、销毁等都会触发相应的生命周期方法。

  • 关键方法

    • onCreate():当 Activity 被创建时调用,通常用于界面的初始化和数据的准备。
    • onStart():当 Activity 从不可见变为可见时调用,适用于界面的显示。
    • onResume():当 Activity 即将处于前台时调用。
    • onPause():当 Activity 失去焦点但仍可见时调用,通常用于暂停动画、保存数据等。
    • onStop():当 Activity 不再可见时调用,适合释放不再需要的资源。
    • onDestroy():当 Activity 被销毁时调用,适合进行资源清理。

    例如:Activity 负责管理用户交互界面,每当用户进入该界面时,都会经过 onCreate()onStart() 等一系列生命周期方法。

2. 存在范围不同:

  • Application:在应用生命周期内只有一个实例,适合存储全局的数据或状态。

  • Activity:每个 Activity 实例都有自己的生命周期,适合管理特定界面的数据和状态。

    例如:在一个应用中,你可能有多个 Activity,每个 Activity 对应不同的界面,而 Application 则是跨整个应用共享的资源。

3. 用途和角色不同:

  • Application:用于管理和维护应用级别的状态和资源。例如:

    • 全局初始化(如网络库、数据库、依赖注入容器等)。
    • 应用配置(如全局的主题、语言等)。
    • 处理跨 Activity 的数据共享(例如缓存、全局变量等)。
  • Activity:用于展示和管理用户界面,处理与用户的交互。每个 Activity 负责显示一个界面,并管理与用户的互动。Activity 也会根据用户的操作响应生命周期方法,决定是否需要更新 UI 或保存数据。

4. 资源管理和性能优化:

  • Application:由于 Application 存在于整个应用生命周期,因此它的资源消耗必须谨慎处理。过多的资源占用可能会影响整个应用的性能。Application 适合初始化一些全局对象,但不应该进行与界面密切相关的操作。

  • Activity:每个 Activity 在用户进入时才会被创建,且在不再需要时会被销毁。对于内存消耗大的资源,Activity 在其生命周期内管理得更细致,确保不占用过多的内存。

5. 跨界面通信:

  • Application:通过 Application,你可以在不同的 Activity 间共享数据和状态。由于它的生命周期贯穿整个应用,所以可以用于存储全局共享的信息。

  • ActivityActivity 主要处理与用户交互相关的界面和数据,它与其他 Activity 的通信通常依赖于 Intent 或通过 FragmentViewModel 等其他组件传递数据。

6. 销毁和回收:

  • ApplicationApplication 通常不会被销毁,除非系统因为资源紧张而回收内存时。在这种情况下,onTerminate() 方法会被调用,但这种情况很少发生。

  • ActivityActivity 是由系统根据用户的行为进行管理的。用户按下“返回”按钮或切换到其他 Activity 时,当前 Activity 可能会被销毁并回收,释放资源。

7.1 MyApplication 类:

  Application 类负责全局初始化,只有一个实例,生命周期贯穿整个应用。这里,我们在 onCreate() 中初始化一些全局资源。

public class MyApplication extends Application {@Overridepublic void onCreate() {super.onCreate();// 应用启动时初始化全局资源Log.d("MyApplication", "onCreate() called - Application has started");}@Overridepublic void onTerminate() {super.onTerminate();// 应用退出时的清理工作Log.d("MyApplication", "onTerminate() called - Application is terminating");}
}

7.2 MainActivity 类:

  Activity 类负责显示用户界面,它有多个生命周期方法,比如 onCreate()onStart()onResume()onPause() 等。每当用户交互时,Activity 的生命周期会发生变化。

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main); // 设置界面Log.d("MainActivity", "onCreate() called - Activity is created");}@Overrideprotected void onStart() {super.onStart();Log.d("MainActivity", "onStart() called - Activity is visible to the user");}@Overrideprotected void onResume() {super.onResume();Log.d("MainActivity", "onResume() called - Activity is in the foreground");}@Overrideprotected void onPause() {super.onPause();Log.d("MainActivity", "onPause() called - Activity is about to lose focus");}@Overrideprotected void onStop() {super.onStop();Log.d("MainActivity", "onStop() called - Activity is no longer visible");}@Overrideprotected void onDestroy() {super.onDestroy();Log.d("MainActivity", "onDestroy() called - Activity is being destroyed");}
}

7.3 AndroidManifest.xml 配置:

    需要在 AndroidManifest.xml 文件中声明 MyApplication 作为 Application 类,并声明 MainActivity 作为启动 Activity

<applicationandroid:name=".MyApplication" <!-- 指定使用自定义的 Application 类 -->android:icon="@mipmap/ic_launcher"android:label="@string/app_name"><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application>

7.4  执行时的日志输出:

  • 当你启动应用时,MyApplicationonCreate() 会首先调用,然后 MainActivity 的生命周期方法依次调用。
  • 你可以查看 Logcat 输出,确认两个类的生命周期方法被调用的顺序。

7.5 日志输出示例:

     假设你启动了应用,首先会看到 ApplicationonCreate() 被调用,然后随着 MainActivity 启动,你会看到以下日志:

D/MyApplication: onCreate() called - Application has started
D/MainActivity: onCreate() called - Activity is created
D/MainActivity: onStart() called - Activity is visible to the user
D/MainActivity: onResume() called - Activity is in the foreground

如果你暂停、停止或销毁 Activity,你会看到以下生命周期方法的调用:

D/MainActivity: onPause() called - Activity is about to lose focus
D/MainActivity: onStop() called - Activity is no longer visible
D/MainActivity: onDestroy() called - Activity is being destroyed

Application 只在应用启动时创建一次,而 Activity 会随着用户操作的不同反复启动和销毁。

http://www.lryc.cn/news/533713.html

相关文章:

  • 如何优化爬虫以提高搜索效率
  • git撤销上一次的提交
  • LLM学习笔记1——本地部署Meta-Llama-3.2-1B大模型
  • Nginx反代Ollama接口跨域、无法逐字输出问题
  • 大学资产管理系统中的下载功能设计与实现
  • 股指入门:股指期货是什么意思?在哪里可以做股指期货交易?
  • < OS 有关 > 利用 google-drive-ocamlfuse 工具,在 Ubuntu 24 系统上 加载 Google DRIVE 网盘
  • Golang的引用类型和指针
  • 51单片机之冯·诺依曼结构
  • 32. C 语言 安全函数( _s 尾缀)
  • Android T(13) 源码分析 — BufferQueue 的分析
  • Vite+TS项目中配置路径别名
  • 看盘细节系列 篇二:集合竞价的9点18分大单打到3%以下或以上,9点19分撤单
  • Java继承简介
  • redis之哨兵集群搭建
  • 保姆级AI开发环境搭建
  • Arduino 型号的对比
  • Kafka系列之:定位topic只能保存最新数据的原因
  • AtCoder Beginner Contest 391(A~E题题解)
  • mysql mvcc 锁 关系
  • 安卓手机基于 Termux 安装 AList 并设置开机自启的详细教程
  • LeetCode:503.下一个更大元素II
  • 实验5 配置OSPFv2验证
  • 第二节 docker基础之---镜像构建及挂载
  • 论文阅读:MGMAE : Motion Guided Masking for Video Masked Autoencoding
  • 记录一下 在Mac下用pyinstallter 打包 Django项目
  • 【漫话机器学习系列】084.偏差和方差的权衡(Bias-Variance Tradeoff)
  • deepseek本地部署-linux
  • 解决使用python提取word文档中所有的图片时图片丢失的问题
  • 【Spring相关知识】Spring应用如何优雅使用消息队列