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

Android 中 Activity 和 Fragment 的区别

Android 中 Activity 和 Fragment 的区别

Activity 和 Fragment 是 Android 应用开发中两个核心组件,它们在应用架构中扮演不同角色,以下是它们的主要区别:

1. 基本概念

特性ActivityFragment
定义代表应用中的一个独立屏幕代表 Activity 中的一部分 UI 或行为
生命周期独立生命周期依附于宿主 Activity 的生命周期
入口点需要在 AndroidManifest.xml 中声明不需要在清单文件中声明

2. 生命周期对比

Activity 生命周期
onCreate()onStart()onResume()onPause()onStop()onDestroy()

Fragment 生命周期(额外包含与 Activity 交互的方法):
onAttach()onCreate()onCreateView()onActivityCreated()onStart()onResume()onPause()onStop()onDestroyView()onDestroy()onDetach()

3. 主要功能差异

功能ActivityFragment
UI 管理管理完整窗口管理部分 UI
导航通过 Intent 启动通过 FragmentTransaction 管理
回退栈自动管理需要手动添加到回退栈
复用性复用性较低高复用性,可在不同 Activity 中使用
多窗口支持可作为独立窗口必须依附于 Activity
任务和返回栈参与应用任务栈不直接参与

4. 使用场景

适合使用 Activity 的情况

  • 应用的主要入口点
  • 需要独立窗口的场景(如全屏播放)
  • 需要处理系统级交互(权限请求、Intent 过滤等)

适合使用 Fragment 的情况

  • 模块化 UI 组件(如 ViewPager 的页面)
  • 适应不同屏幕尺寸(平板/手机不同布局)
  • 需要动态替换的 UI 部分
  • 共享 UI 组件(多个 Activity 共用的界面部分)

5. 通信方式

Activity 通信

  • 通过 startActivity()Intent
  • 使用 startActivityForResult()(已弃用,推荐 Activity Result API)

Fragment 通信

  • 通过宿主 Activity(使用接口回调)
  • ViewModel(推荐方式)
  • Fragment 结果 API(setFragmentResult()

6. 代码示例对比

Activity 示例

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        // Activity 逻辑代码
    }
}

Fragment 示例

public class MyFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // 膨胀 Fragment 的布局
        return inflater.inflate(R.layout.fragment_my, container, false);
    }
    
    @Override
    public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        // Fragment 逻辑代码
    }
}

7. 最佳实践建议

  1. 单 Activity 多 Fragment 架构(推荐):

    • 使用 Navigation 组件管理 Fragment
    • Activity 作为容器,Fragment 处理具体界面
  2. 避免 Fragment 直接通信

    • 通过 ViewModel 或 Activity 中介通信
  3. 正确处理生命周期

    • Fragment 的生命周期比 Activity 更复杂,需特别注意
  4. 平板适配

    • 使用 Fragment 可以轻松实现不同屏幕尺寸的布局适配

相关文章:

  • Linux设置SSH免密码密钥登录
  • 使用AI一步一步实现若依(27)
  • Docker Compose 部署 Loki
  • SpringCloud Stream:消息驱动的微服务架构设计
  • LLM推理加速框架有哪些
  • 【江协科技STM32】读写备份寄存器RTC实时时钟(学习笔记)
  • Python电影市场特征:AR模型时间序列趋势预测、热图可视化评分影响分析IMDb数据|附数据代码
  • 低空智能目标(无人机)管理控制系统技术详解
  • SpringCloud Zuul 使用教程
  • 《Solidity智能合约开发:从零到一实战指南》大纲
  • Javascript 全局脚本编程和模块化编程的区别
  • 《TypeScript 7天速成系列》第4天:TypeScript模块与命名空间:大型项目组织之道
  • 【Git多分支使用教程】
  • 第 6 章:优化动态分配内存的变量_《C++性能优化指南》_notes
  • 用python制作一个贪吃蛇小游戏
  • VSCode加Cline插件加DeepSeek实现AI编程指南
  • 【Python】pillow库学习笔记4-利用ImageDraw和ImageFont在图像上添加文字
  • 【Mysql】事务管理:原理、操作与应用
  • 怎么处理 Vue 项目中的错误的?
  • Python----数据分析(足球运动员数据分析)
  • 北汽蓝谷一季度净亏损9.5亿元,拟定增募资不超60亿元
  • 国家核准10台核电新机组,四大核电央企披露新项目进展
  • “90后”樊鑫履新乌兰察布市察右中旗副旗长人选
  • 秦洪看盘|浮现新预期,存量资金积极调仓
  • 2025年“畅游江淮 合肥等侬”文旅推介会在沪成功举办
  • 申花四连胜领跑中超,下轮榜首大战对蓉城将是硬仗考验