返回

Java转Android:第5天——Activity、Intent、小小通讯录

Android

Activity生命周期和Intent:Android应用程序开发基础

Activity生命周期

Android应用程序的基本组成部分是Activity,它充当用户界面容器和用户输入处理程序。每个Activity都有一个生命周期,它表示从创建到销毁的状态变化序列。了解生命周期对于管理Activity的UI和数据流至关重要。

Activity生命周期的不同阶段包括:

  • onCreate(): 当Activity首次创建时调用,用于初始化布局和控件。
  • onStart(): 当Activity变得可见时调用,用于恢复UI状态和数据。
  • onResume(): 当Activity获得焦点时调用,用于继续用户交互。
  • onPause(): 当Activity失去焦点时调用,用于暂停UI更新和数据操作。
  • onStop(): 当Activity不再可见时调用,用于保存UI状态和数据。
  • onDestroy(): 当Activity被销毁时调用,用于释放资源和清理数据。

每个生命周期阶段对应特定的任务。例如,可以在onCreate()中初始化数据,在onStart()中恢复用户状态,在onResume()中继续用户交互,在onPause()中保存用户输入,在onStop()中释放资源,在onDestroy()中清理数据。

Intent的用途

Intent是Android中传递消息和数据的重要对象。它可以在以下情况下使用:

  • 启动另一个Activity
  • 启动一个服务
  • 发送广播
  • 打开一个网址

Activity之间传值

Intent在Activity之间传递数据非常有用。以下是如何在Activity之间传值:

  1. 在发送Activity中创建Intent对象,并使用putExtra()方法添加要传递的数据。
  2. 启动目标Activity,并使用startActivity()方法传递Intent。
  3. 在目标Activity中,使用getIntent()方法获取Intent,然后使用getStringExtra()方法获取传递的数据。

示例:通讯录应用程序

为了更好地理解Activity和Intent,让我们创建一个简单的通讯录应用程序:

  1. 创建MainActivity和ContactActivity两个Activity。
  2. 在MainActivity中创建联系人列表,并使用Intent启动ContactActivity。
  3. 在ContactActivity中获取MainActivity传递的联系人数据,并显示在界面上。

代码示例:

// MainActivity.java
Intent intent = new Intent(this, ContactActivity.class);
intent.putExtra("contact", contact);
startActivity(intent);

// ContactActivity.java
Intent intent = getIntent();
Contact contact = intent.getParcelableExtra("contact");

结论

Activity生命周期和Intent是Android应用程序开发的基础。通过了解它们,你可以有效地管理用户界面和数据流。本文中的通讯录应用程序只是Activity和Intent的基本用法的一个例子。随着你的进步,你可以发现它们在更复杂应用程序中的强大功能。

常见问题解答

1. Activity生命周期有什么实际用途?

  • 管理UI状态和数据,确保用户体验的流畅性和一致性。
  • 释放资源并回收内存,提高应用程序的性能和稳定性。

2. Intent除了传递数据外还有其他用途吗?

  • 启动服务、发送广播和打开网址,提供跨组件通信和交互。

3. 如何防止Activity在生命周期变更时丢失数据?

  • 在onPause()或onStop()中保存数据,并在onStart()或onResume()中恢复数据。
  • 使用数据持久化机制(如SQLite或SharedPreferences)将数据存储在设备上。

4. Activity之间传值有哪些限制?

  • 传递的对象必须是可序列化的或可打包的(例如Parcelable)。
  • 数据大小有限,应避免传递大量数据。

5. 如何处理Activity生命周期中的并发问题?

  • 理解Activity堆栈和Task概念,确保任务和Activity之间的正确顺序和管理。
  • 使用同步机制(例如锁或同步代码块)来防止数据竞争和冲突。