Skip to content

在 Android 开发中,Activity 是应用的核心组件之一,它代表一个用户界面(UI)的单一屏幕。以下是 Kotlin 语言的详细解释和基础用法:


一、Activity 基础概念

  1. 作用

    • 管理用户交互界面(UI)
    • 处理用户输入事件(点击、滑动等)
    • 协调与其他组件(Fragment、Service 等)的通信
  2. 生命周期
    Activity 有明确的生命周期方法,开发者需重写它们以管理资源:

    kotlin
    class 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 的步骤

  1. 定义 Activity 类
    继承 AppCompatActivity,使用 setContentView 绑定布局:

    kotlin
    class SecondActivity : AppCompatActivity() {
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_second)
        }
    }
  2. 注册到 AndroidManifest.xml

    xml
    <application>
        <activity
            android:name=".SecondActivity"
            android:label="Second Screen" />
    </application>

三、启动 Activity 与传参

  1. 显式启动
    使用 Intent 跳转到目标 Activity:

    kotlin
    // 在 MainActivity 中
    val intent = Intent(this, SecondActivity::class.java)
    startActivity(intent)
  2. 传递数据

    • 发送数据:
      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)

四、处理返回结果

  1. 启动 Activity 并期待返回结果

    kotlin
    // MainActivity 中
    val intent = Intent(this, SecondActivity::class.java)
    startActivityForResult(intent, REQUEST_CODE)
  2. 在目标 Activity 中返回数据

    kotlin
    // SecondActivity 中
    val resultIntent = Intent()
    resultIntent.putExtra("RESULT_KEY", "Success!")
    setResult(RESULT_OK, resultIntent)
    finish() // 关闭当前 Activity
  3. 处理返回结果

    kotlin
    override 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")
        }
    }

五、保存和恢复状态

  1. 临时数据保存(如屏幕旋转)
    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)
    }

六、注意事项

  1. 避免内存泄漏

    • 不要在 Activity 中持有静态引用(如单例)。
    • 使用 ViewModel + LiveData 分离业务逻辑。
  2. 性能优化

    • 耗时操作(网络请求、数据库查询)应在后台线程(如协程)执行。