首页 > 其他分享 >Android经典实战之使用compose时一般用一个activity还是多个

Android经典实战之使用compose时一般用一个activity还是多个

时间:2024-08-28 17:51:14浏览次数:16  
标签:compose 架构 activity savedInstanceState 生命周期 Activity fun Android onCreate

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点

在使用 Jetpack Compose 开发 Android 应用时,选择使用一个 Activity 还是多个 Activity 主要取决于应用的架构和复杂性。以下是一些权衡和指导建议,可以帮助你做出决定:

使用单个 Activity 的优势:

  1. 简单且现代:现代 Android 推荐使用"单 Activity 架构",结合 Jetpack Navigation 组件来管理不同的屏幕,这种方法能简化导航逻辑和生命周期管理。
  2. 状态传递更简单:在单个 Activity 中,跨屏幕的状态管理和数据共享更加简便,不需要通过 Activity 的 Intent 传递数据。
  3. 减少重复代码:使用一个 Activity 可以减少集成和生命周期处理方面的重复代码。

使用多个 Activity 的优势:

  1. 清晰的模块化:对于一些大型应用或者需要清晰模块化的部分,可以使用多个 Activity。每个 Activity 管理单独的一组功能,这样有助于解耦和维护。
  2. 不同的入口点:如果应用的某些部分需要独立访问,比如通过不同的深度链接或者不同的快捷方式,那么多个 Activity 可能更适合。
  3. 不同的生命周期:某些特殊情况可能需要独立的生命周期管理,不同 Activity 之间的生命周期独立性会更加明显。

综合考虑:

  • 如果应用规模较小或中等,使用单 Activity 结合 Jetpack Compose 和 Navigation 组件通常是推荐的做法。
  • 对于复杂的大型应用,如果需要特定模块化和独立的访问路径,则可以通过多 Activity 来实现。

示例:单 Activity 与多 Activity

假设你有一个简单的应用程序:

单 Activity 架构:
class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            MyApp()
        }
    }
}

@Composable
fun MyApp() {
    NavHost(navController = rememberNavController(), startDestination = "home") {
        composable("home") { HomeScreen() }
        composable("details") { DetailsScreen() }
    }
}
多 Activity 架构:
class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            // Display Home Screen content
        }
    }
}

class DetailsActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            // Display Details Screen content
        }
    }
}

注意,在多 Activity 架构中,你需要通过 Intent 在 Activity 之间传递数据,而在单 Activity 架构中可以直接在同一个进程内共享数据。

选择具体的架构时,请根据项目情况权衡优缺点,以实现最佳的用户体验和可维护性。

总结

目前Compose比较适合的方式还是用来替换View


欢迎关注我的公众号AntDream查看更多精彩文章!

AntDream

标签:compose,架构,activity,savedInstanceState,生命周期,Activity,fun,Android,onCreate
From: https://blog.csdn.net/myth13141314/article/details/141600024

相关文章

  • Android 启动时判断overlay fs是否挂载
    一、背景Android新版本使用super分区替代原来的system、vendor后,就采用了overlayfs文件系统。这种文件系统在执行adbremount后,修改system、vendor分区内容并不是真正存储在原来的位置,而是单独利用super剩余空间或data分区存了一份新的,原来的文件并没有改变。系统使用时判断......
  • Android面试高阶问题:Android屏幕刷新机制与优化指南
    目录1屏幕刷新基础概念1.1CPU与GPU的作用2.2SurfaceFlinger与图形合成2.3帧、帧率与屏幕刷新率2屏幕撕裂与双缓冲机制2.1屏幕撕裂的原因与影响2.2双缓冲机制的工作原理3优化策略与实践3.1性能分析工具与方法3.2优化案例分析与实施3.2.1案例四:异步加载与......
  • 面试必考问题:Android APP耗电最全解析和优化指南
    目录1AndroidAPP耗电原因分析1.1后台应用持续运行1.2高CPU使用率1.3网络使用不当1.4错误代码实现2Android不同版本的耗电优化功能2.1JobSchedulingAPI与BatteryHistorian2.2JobSchedulingAPI的深入解析2.3BatteryHistorian的实际应用2.4结合JobSch......
  • Android网络请求 |(一) 网络基础概念
    一、前端和后端 前端和后端通过接口交互。前端web端:使用的网页,打开的网站都是前端(使用html、css等语言)显示页面以及做一些简单的校验,比如说非空校验app端:android或者object-C(开发ios上的app)开发的app,后端在页面上操作的业务逻辑、功能如:后端控制购物的时候扣除的余额,......
  • 如何有效学习Android Framework:从系统编译到Framework深入
    Android开发者中,不少人希望从应用开发过渡到系统层次的开发,特别是深入理解和掌握Framework的开发技能,这不仅能为你打开新的职业大门,还能让你更深入地理解Android系统的运行机制。本文将介绍如何从系统编译开始,逐步深入到系统应用和Framework的学习路径。1.掌握系统编译:打好基础......
  • Android开发 - IInterface 接口 Binder 机制跨进程通信 (IPC)解析
    什么是IInterfaceIInterface一个接口,用于跨进程通信(IPC)。有时需要让一个应用程序与另一个应用程序或服务进行通信。这些应用程序可能运行在不同的进程中,使用Binder机制来实现这种通信,而IInterface就是Binder机制的一部分简单来说,IInterface是一个基础接口,它为跨......
  • Android开发 - Application 基础类全局的应用级状态管理解析
    Application是什么Application是一个基础类,用于全局的应用级状态管理。它在应用程序启动时被创建,并在应用程序关闭时销毁。Application对象的生命周期与应用程序的生命周期一致,因此它非常适合用来保存全局的应用状态信息或初始化全局资源Application的主要作用全局状态管......
  • mac强大的安卓文件传输工具:Android File Transfer for mac 版
    AndroidFileTransfer是一款专为Mac用户设计的文件传输工具,旨在简化Mac与Android设备之间的文件传输与管理过程。以下是该软件的详细介绍:一、基本功能文件传输:AndroidFileTransfer支持通过USB连接,快速、稳定地在Mac与Android设备之间传输文件。无论是照片、音乐、视......
  • Android Qcom USB Driver学习(十)
    本章主要是基于之前的学习,实现一个hidraw的驱动,发现有两种用于识别usb设备的方式,放别是usb_device_id和hid_device_idhid_probe(1)hid_device_idkernel/msm-4.19/drivers/hid/usbhid/hid-core.cbus=usbusb_register注册驱动->sys/bus/usb/driver↓↓↓↓↓↓......
  • Android开发 - synchronized 关键字控制多个线程对共享资源的访问解析
    什么是synchronizedsynchronized一个关键字,用于实现线程同步。其主要作用是控制多个线程对共享资源的访问,确保被synchronized修饰的代码块或方法同一时间只有一个线程可以执行,从而避免数据不一致的问题为什么需要synchronized在多线程编程中,多个线程可能同时访问和修改......