在 Android 开发中,Activity 是应用的核心组件之一,它代表一个用户界面(UI)的单一屏幕。以下是 Kotlin 语言的详细解释和基础用法:
一、Activity 基础概念
作用
- 管理用户交互界面(UI)
- 处理用户输入事件(点击、滑动等)
- 协调与其他组件(Fragment、Service 等)的通信
生命周期
Activity 有明确的生命周期方法,开发者需重写它们以管理资源:kotlinclass MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // 绑定布局 } override fun onStart() { /* 界面可见但未交互 */ } override fun onResume() { /* 界面进入活跃状态 */ } override fun onPause() { /* 界面部分被遮挡 */ } override fun onStop() { /* 界面完全不可见 */ } override fun onDestroy() { /* 释放资源 */ } }
二、创建 Activity 的步骤
定义 Activity 类
继承AppCompatActivity
,使用setContentView
绑定布局:kotlinclass SecondActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_second) } }
注册到 AndroidManifest.xml
xml<application> <activity android:name=".SecondActivity" android:label="Second Screen" /> </application>
三、启动 Activity 与传参
显式启动
使用Intent
跳转到目标 Activity:kotlin// 在 MainActivity 中 val intent = Intent(this, SecondActivity::class.java) startActivity(intent)
传递数据
- 发送数据:kotlin
intent.putExtra("KEY_NAME", "Alice") intent.putExtra("KEY_AGE", 25) startActivity(intent)
- 接收数据(在 SecondActivity 中):kotlin
val name = intent.getStringExtra("KEY_NAME") val age = intent.getIntExtra("KEY_AGE", 0)
- 发送数据:
四、处理返回结果
启动 Activity 并期待返回结果
kotlin// MainActivity 中 val intent = Intent(this, SecondActivity::class.java) startActivityForResult(intent, REQUEST_CODE)
在目标 Activity 中返回数据
kotlin// SecondActivity 中 val resultIntent = Intent() resultIntent.putExtra("RESULT_KEY", "Success!") setResult(RESULT_OK, resultIntent) finish() // 关闭当前 Activity
处理返回结果
kotlinoverride fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) { val result = data?.getStringExtra("RESULT_KEY") } }
五、保存和恢复状态
- 临时数据保存(如屏幕旋转)kotlin
override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) outState.putString("SAVED_TEXT", editText.text.toString()) } override fun onRestoreInstanceState(savedInstanceState: Bundle) { super.onRestoreInstanceState(savedInstanceState) val text = savedInstanceState.getString("SAVED_TEXT") editText.setText(text) }
六、注意事项
避免内存泄漏
- 不要在 Activity 中持有静态引用(如单例)。
- 使用
ViewModel
+LiveData
分离业务逻辑。
性能优化
- 耗时操作(网络请求、数据库查询)应在后台线程(如协程)执行。