安卓开发核心:Activity生命周期与架构解析

安卓开发核心:Activity生命周期与架构解析
1. 安卓开发基础架构解析作为安卓开发者理解程序的基本结构是构建稳健应用的第一步。每个安卓应用都由四个核心组件构成Activity、Service、Broadcast Receiver和Content Provider。其中Activity作为用户界面的载体是我们最常打交道的组件。典型的安卓项目结构遵循以下目录布局manifests/AndroidManifest.xml应用配置入口java/存放Kotlin/Java源代码res/资源文件目录布局、图片、字符串等Gradle脚本构建配置在Android Studio中创建新项目时系统会自动生成MainActivity.kt和对应的activity_main.xml布局文件。这种MVC模式的分离让界面设计与业务逻辑各司其职。实际开发中建议采用MVVM架构通过ViewModel将UI逻辑与业务逻辑进一步解耦这在处理屏幕旋转等配置变更时尤为重要。2. Activity生命周期深度剖析Activity生命周期是安卓开发的核心概念理解各个回调方法的触发时机对开发稳定应用至关重要。官方文档定义了六个核心生命周期状态2.1 基础生命周期回调onCreate()初始化基本组件只执行一次的最佳实践override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // 初始化ViewModel viewModel ViewModelProvider(this)[MainViewModel::class.java] // 恢复保存的状态 savedInstanceState?.getString(key)?.let { // 处理恢复逻辑 } }onStart()界面可见但未获得焦点适合注册广播接收器等操作onResume()进入交互状态恢复动画、摄像头预览等需要持续运行的功能onPause()失去焦点但仍可见快速释放独占资源如摄像头onStop()完全不可见执行数据持久化等耗时操作onDestroy()最终清理注意区分配置变更和真正退出2.2 生命周期实战技巧在多窗口模式下Activity可能同时处于onPause()但依然可见的状态。这时需要特别注意资源管理class CameraHelper : LifecycleObserver { OnLifecycleEvent(Lifecycle.Event.ON_RESUME) fun startPreview() { if (!cameraOpen) { openCamera() } } OnLifecycleEvent(Lifecycle.Event.ON_PAUSE) fun stopPreview() { if (!isInMultiWindowMode()) { releaseCamera() } } }3. 页面间通信机制3.1 基础Intent通信启动新Activity的标准方式val intent Intent(this, DetailActivity::class.java).apply { putExtra(item_id, 123) flags Intent.FLAG_ACTIVITY_SINGLE_TOP } startActivity(intent)接收参数处理val itemId intent?.getIntExtra(item_id, 0) ?: 03.2 高级通信模式Activity Result API替代startActivityForResultval launcher registerForActivityResult( ActivityResultContracts.StartActivityForResult() ) { result - if (result.resultCode RESULT_OK) { val data result.data?.getStringExtra(result) // 处理返回结果 } } // 触发请求 launcher.launch(Intent(this, PickerActivity::class.java))ViewModel共享数据class SharedViewModel : ViewModel() { val selectedItem MutableLiveDataItem() } // 在多个Activity中共享同一个ViewModel val model ViewModelProvider(requireActivity())[SharedViewModel::class.java]4. 状态保存与恢复4.1 临时状态保存override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) outState.putString(edit_text, binding.editText.text.toString()) }4.2 Jetpack Compose中的状态保持var textState by rememberSaveable { mutableStateOf() } TextField( value textState, onValueChange { textState it } )5. 常见问题排查生命周期回调不执行检查是否重写了super方法调用确认没有设置FLAG_ACTIVITY_NO_HISTORY等特殊标志页面跳转卡顿避免在onCreate中执行耗时操作考虑使用postponeEnterTransition处理复杂转场内存泄漏预防在onDestroy中取消所有协程使用WeakReference持有Activity引用状态恢复异常确保所有保存的状态都实现了Parcelable大型数据应使用ViewModel持久化存储掌握这些核心概念后建议通过实际项目加深理解。可以从简单的TODO应用开始逐步实现以下功能列表页与详情页的跳转横竖屏切换时的状态保持使用ViewModel实现页面间数据共享实现返回结果的处理逻辑在开发过程中善用Android Studio的Layout Inspector和Lifecycle工具可以直观观察Activity状态变化帮助快速定位问题。