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

Android开发四大组件和生命周期及setFlags

文章目录

  • Android开发四大组件
    • 1. Activity(活动)
    • 2. Service(服务)
    • 3. BroadcastReceiver(广播接收器)
    • 4. ContentProvider(内容提供者)
    • 共同特点
  • Activity 生命周期详解
    • 完整的生命周期方法
    • 特殊情况生命周期方法
    • 生命周期图示
    • 常见场景的生命周期变化
  • Intent的setFlags(int flags)方法详解
    • 常用标志(Flags)分类
      • 1. 任务栈控制标志
        • FLAG_ACTIVITY_NEW_TASK (0x10000000)
        • FLAG_ACTIVITY_CLEAR_TASK (0x00008000)
        • FLAG_ACTIVITY_CLEAR_TOP (0x04000000)
      • 2. Activity 实例管理标志
        • FLAG_ACTIVITY_SINGLE_TOP (0x20000000)
        • FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS (0x00800000)
      • 3. 任务栈历史管理标志
        • FLAG_ACTIVITY_NO_HISTORY (0x40000000)
        • FLAG_ACTIVITY_REORDER_TO_FRONT (0x00020000)
      • 4. 其他常用标志
        • FLAG_ACTIVITY_NO_ANIMATION (0x00010000)
        • FLAG_ACTIVITY_MULTIPLE_TASK (0x08000000)
    • 组合使用示例
    • 注意事项

Android开发四大组件

在这里插入图片描述

Android四大组件是Android应用开发的基础架构,包括:

1. Activity(活动)

  • 作用:用户交互界面
  • 特点
    • 提供可视化用户界面
    • 一个应用通常由多个Activity组成
    • 通过Intent进行跳转
  • 生命周期:onCreate(), onStart(), onResume(), onPause(), onStop(), onDestroy()

2. Service(服务)

  • 作用:后台运行组件
  • 特点
    • 无用户界面
    • 可用于长时间运行操作(如下载、播放音乐)
    • 分为启动状态和绑定状态
  • 类型
    • Started Service(启动服务)
    • Bound Service(绑定服务)

3. BroadcastReceiver(广播接收器)

  • 作用:接收系统或应用广播消息
  • 特点
    • 用于响应系统级事件(如电量低、网络变化)
    • 可以静态注册(Manifest)或动态注册(代码)
    • 通过IntentFilter指定接收的广播类型

4. ContentProvider(内容提供者)

  • 作用:数据共享组件
  • 特点
    • 管理结构化数据共享
    • 提供统一接口访问数据
    • 通过URI标识数据
    • 常用于应用间数据共享

共同特点

  • 都需要在AndroidManifest.xml中声明
  • 都可以通过Intent进行激活或通信
  • 都有各自的生命周期

这些组件构成了Android应用的基本框架,开发者通过组合使用这些组件来构建功能丰富的应用程序。

在这里插入图片描述

Activity 生命周期详解

Activity 生命周期是 Android 开发中最重要的概念之一,它描述了 Activity 从创建到销毁的整个过程。理解生命周期对于正确处理资源管理、数据保存和用户体验至关重要。

完整的生命周期方法

  1. onCreate()

    • Activity 首次创建时调用
    • 必须实现的方法,用于初始化基本组件
    • 应该在此处调用 setContentView() 设置布局
    • 接收 savedInstanceState 参数(可能为 null)
  2. onStart()

    • Activity 变为可见状态时调用
    • 此时 Activity 还未出现在前台,不能与用户交互
    • 适合初始化需要在 Activity 可见时运行的组件
  3. onResume()

    • Activity 进入前台并可与用户交互时调用
    • 在此方法中恢复动画、摄像头等独占资源
    • 应用的核心功能通常在此状态下运行
  4. onPause()

    • 当 Activity 开始失去焦点时调用
    • 另一个 Activity 即将进入前台(如对话框或新 Activity)
    • 应该在此保存持久性数据,停止动画等消耗资源操作
    • 注意:不能执行耗时操作,否则会影响新 Activity 的显示
  5. onStop()

    • Activity 完全不可见时调用
    • 新 Activity 已完全覆盖当前 Activity
    • 释放不需要在 Activity 不可见时使用的资源
  6. onDestroy()

    • Activity 被销毁前调用
    • 可能是用户主动关闭或系统为回收内存
    • 清理所有资源,避免内存泄漏
  7. onRestart()

    • Activity 从停止状态重新启动时调用
    • onStop() 后且 Activity 再次显示前调用

特殊情况生命周期方法

  1. onSaveInstanceState(Bundle outState)

    • 在 Activity 可能被销毁前调用(如屏幕旋转)
    • 用于保存临时状态到 Bundle 对象
    • 数据会在 onCreate()onRestoreInstanceState() 中恢复
  2. onRestoreInstanceState(Bundle savedInstanceState)

    • onStart() 之后调用
    • 恢复之前通过 onSaveInstanceState() 保存的状态

生命周期图示

启动Activity → onCreate() → onStart() → onResume() → Activity运行中↑       ↓ onPause() ←       ↓ onStop() ←|       → onRestart() → onStart()└─────── onDestroy()

常见场景的生命周期变化

  1. 正常启动和退出

    • onCreate() → onStart() → onResume()
    • onPause() → onStop() → onDestroy()
  2. 按下Home键

    • onPause() → onStop()
  3. 从后台返回

    • onRestart() → onStart() → onResume()
  4. 屏幕旋转

    • onPause() → onSaveInstanceState() → onStop() → onDestroy()
    • onCreate() → onStart() → onRestoreInstanceState() → onResume()

理解并正确管理 Activity 生命周期是开发稳定、高效 Android 应用的基础。
在这里插入图片描述

Intent的setFlags(int flags)方法详解

Intent.setFlags(int flags) 是 Android 中用于控制 Activity 启动行为的重要方法,它通过设置各种标志(flags)来影响 Activity 的任务栈(Task)和启动模式。

常用标志(Flags)分类

1. 任务栈控制标志

FLAG_ACTIVITY_NEW_TASK (0x10000000)
  • 作用:在新任务中启动 Activity
  • 使用场景
    • 从 Service 或 BroadcastReceiver 启动 Activity 时必须使用
    • 创建独立的任务栈
  • 注意:如果已有该 Activity 的实例存在,会将该实例带到前台
FLAG_ACTIVITY_CLEAR_TASK (0x00008000)
  • 作用:清除现有任务栈中的所有 Activity
  • 配合使用:通常与 FLAG_ACTIVITY_NEW_TASK 一起使用
  • 效果:新 Activity 将成为任务栈中唯一的 Activity
FLAG_ACTIVITY_CLEAR_TOP (0x04000000)
  • 作用:如果目标 Activity 已在栈中,则清除它上面的所有 Activity
  • 行为
    • 如果目标 Activity 在栈顶:直接使用现有实例
    • 如果目标 Activity 在栈中但不在栈顶:销毁它上面的所有 Activity
  • 常见用途:返回应用主界面

2. Activity 实例管理标志

FLAG_ACTIVITY_SINGLE_TOP (0x20000000)
  • 作用:相当于 launchMode=“singleTop”
  • 行为:如果目标 Activity 已在栈顶,则不会创建新实例,而是调用其 onNewIntent()
  • 使用场景:防止重复创建相同的 Activity(如通知点击)
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS (0x00800000)
  • 作用:Activity 不会出现在最近任务列表中
  • 使用场景:敏感页面或临时页面

3. 任务栈历史管理标志

FLAG_ACTIVITY_NO_HISTORY (0x40000000)
  • 作用:Activity 不会保留在任务栈中
  • 行为:用户离开后,该 Activity 会被立即销毁
  • 使用场景:临时中间页面(如登录页面)
FLAG_ACTIVITY_REORDER_TO_FRONT (0x00020000)
  • 作用:如果 Activity 已在任务栈中,则将其移到栈顶而不创建新实例
  • 行为:调用现有实例的 onNewIntent()
  • 使用场景:重新激活已存在的 Activity

4. 其他常用标志

FLAG_ACTIVITY_NO_ANIMATION (0x00010000)
  • 作用:禁用 Activity 切换动画
  • 使用场景:需要无动画过渡时
FLAG_ACTIVITY_MULTIPLE_TASK (0x08000000)
  • 作用:总是创建新任务,即使已有相同任务存在
  • 配合使用:必须与 FLAG_ACTIVITY_NEW_TASK 一起使用

组合使用示例

// 示例1:清除整个任务栈并启动新的主Activity
Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);// 示例2:单例模式启动Activity(如果已存在则调到前台)
Intent intent = new Intent(this, DetailActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);// 示例3:防止重复创建相同的Activity(类似singleTop)
Intent intent = new Intent(this, NotificationActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);

注意事项

  1. 标志可以通过 | 运算符组合使用
  2. 某些标志需要特定组合才能生效(如 FLAG_ACTIVITY_NEW_TASK)
  3. 这些标志会覆盖 Manifest 中设置的 launchMode
  4. 在 Android 5.0+ 中,任务栈行为有部分变化,需注意兼容性
  5. 过度使用标志可能导致任务栈管理混乱,应谨慎使用

理解这些标志对于控制应用导航流程和任务栈行为非常重要,合理使用可以创建更符合预期的用户体验。


在这里插入图片描述

相关文章:

  • 最长子序列长度(LIS)--个数遍历的二分+贪心优化
  • React Article模块
  • 【后端开发】Spring日志
  • 得物官网sign签名逆向分析
  • HashMap 初步理解 put 操作流程 HashMap 的线程安全问题
  • JVM笔记【一】java和Tomcat类加载机制
  • Visio导出清晰图片步骤
  • 工业级向量检索核心技术:IVF-PQ原理与全流程解析
  • Promise 使用介绍
  • 当HTTP遇到SQL注入:Java开发者的攻防实战手册
  • UE学习记录part19
  • cesium中postProcessStages全面解析
  • 哔哩哔哩工具箱:BiliTools v1.3.2
  • 网络开发基础(游戏)之 Socket API
  • REC: 引爆全球万亿级市场!Web3+消费革命重塑全球-东南亚-跨境商业未来
  • [HCIP] OSPF 综合实验
  • 高速系统设计简介
  • 背包 DP 详解
  • PyTorch 深度学习实战(38):注意力机制全面解析(从Seq2Seq到Transformer)
  • 将 DeepSeek 集成到 Spring Boot 项目实现通过 AI 对话方式操作后台数据
  • “中国共产党的故事——习近平新时代中国特色社会主义思想在重庆的实践”重庆经贸推介会成功举办
  • 美国防部查信息外泄,防长四名亲信被解职
  • 沈辛成评《主动出击》丨科学普及,究竟需要靠谁主动出击
  • 报告:去年物业服务百强企业营业收入均值同比增长3.52%
  • 关注“老旧小区加装电梯”等安全隐患,最高检发布相关典型案例
  • 如此城市|漫步瑞金医院展览,艺术可以成为一种“社会雕塑”