Android开发中启动Activity应选择Intent方式还是直接实例化类?
首先明确Android平台的Activity是由系统管理生命周期的组件,两种方式的使用场景差异极大,选错会直接导致功能异常甚至崩溃:
核心结论
99%的常规业务场景下,你都应该选择通过Intent方式启动REG,直接new REG()创建实例的方式仅适用于极少数特殊场景,不能用来展示页面。
1. Intent启动REG的适用场景
这是Android官方推荐的标准Activity启动方式,所有需要REG作为独立交互页面的场景都应该选它:
- 需要
REG作为正常界面展示给用户,完整触发onCreate/onStart/onResume等生命周期回调,自带的窗口、按钮、交互逻辑能正常运行 - 需要系统自动管理页面生命周期:比如按返回键自动销毁、内存不足时自动回收页面、支持系统默认的页面切换动画
- 需要在其他组件(其他Activity、Service、BroadcastReceiver)中拉起
REG页面 - 需要给
REG传递参数时,通过Intent.putExtra()即可安全传递数据,完全符合系统规范 - 需要适配分屏、多任务、最近任务列表等系统特性,只有走
Intent启动的Activity才能正常支持
2. 直接new REG()创建实例的适用场景
直接new出来的Activity实例没有和系统服务绑定,不会触发生命周期,也无法渲染视图,仅以下场景可使用:
- 仅需要复用
REG类中封装的、和UI/生命周期/Context完全无关的公共工具方法 - 做单元测试时,模拟
REG实例执行非UI相关的逻辑测试,不需要实际渲染页面 - 注意:如果试图通过
new REG()的方式直接展示它的界面,100%会触发上下文相关的崩溃,无法正常运行
选择原则
- 只要你需要
REG作为可交互的页面给用户使用,一律选Intent启动 - 只有你不需要
REG展示界面,仅复用内部非UI逻辑、或者做测试的时候,才考虑直接new REG() - 优化建议:如果
REG类中有大量可复用的通用逻辑,建议单独拆成工具类或ViewModel,不要和Activity绑定,避免误用
内容的提问来源于stack exchange,提问作者Luis A. Florit
相关产品推荐
相关产品推荐

