what
Activity 的基本概念
Activity 是 Android 应用的一个单独的屏幕,相当于一个窗口或页面。每个 Activity 通常都对应着一个用户界面(UI),并且是用户与应用程序交互的入口点。
- Activity 的生命周期:Activity 有一套预定义的生命周期方法,用于管理它的创建、显示、暂停和销毁状态。
- 每个应用至少有一个 Activity:通常,应用的主界面就是一个 Activity。当你打开一个应用时,系统会启动该应用的第一个 Activity。
Activity 的生命周期
理解 Activity 的生命周期 对于管理应用资源、避免内存泄漏和优化用户体验非常重要。下面是 Activity 生命周期的主要方法及其用途:
onCreate():Activity 被创建时调用。你通常会在这个方法中初始化用户界面和设置一些初始数据。
onStart():Activity 即将对用户可见时调用。
onResume():Activity 开始与用户交互时调用,应用进入“前台”。
onPause():Activity 即将离开前台(例如,用户切换到另一个应用时)调用。你可以在这里保存数据或停止动画等。 最主要是我们要知道我们此时还是能在前台看见app,我们依旧可见。
onStop():Activity 不再可见时调用,可能被销毁或切换到后台。
onDestroy():Activity 被销毁时调用,通常是当用户关闭应用或系统资源不足时。
周期调用
1 | Log.d("ActivityLifecycle", "onDestroy called"); |
Activity 与任务栈
每个 Activity 都存在于一个任务栈(Task Stack)中。当你启动一个新的 Activity 时,它会被压入栈顶,用户按下返回键时,Activity 会从栈中移除,返回到上一个 Activity。这个机制确保了应用的页面导航顺序。
UI 与 Activity 的绑定
通常,Activity 会关联一个 XML 布局文件,这个文件定义了 Activity 的用户界面。通过 setContentView()
方法,你可以将布局文件绑定到 Activity:
1 |
|
在布局文件中,你定义了按钮、文本框等 UI 元素。通过 findViewById(),你可以在 Activity 中访问并操作这些元素:
1 | Button myButton = findViewById(R.id.my_button); |
其实有没有想过一个问题,我们的activity交互和用户交互为什么必须写在周期方法中。因为我们需要一个入口,来把整个程序串起来. 同时我们习惯把东西放在oncreat方法因为一个activity开始的时候我们就可以把所有的一些监听设备都准备好,用户一点击我们就调用。
相关控件类
1 | import android.widget.TextView; |
Activity 之间的跳转与交互
在应用程序中,你可能会有多个 Activity,用户可以通过不同的页面进行操作。你可以使用 Intent 在 Activity 之间跳转和传递数据。
采用最新的跳转方式 ActivityResultLauncher,首先我们模拟从A到B进行操作,
1 | // 从当前 Activity 跳转到另一个 Activity |
在putExtra参数中 bundle也是一个重要的参数,Bundle
是 Android 中一个非常灵活的数据容器,它可以存储多种类型的数据,包括基本数据类型、字符串、甚至其他 Bundle
对象或实现了 Parcelable
接口的对象。当你需要传递复杂数据结构或者大量数据时,使用 Bundle
可以是一个更好的选择。
1 | Bundle bundle = new Bundle(); |
启动B activity之后可以看到在B中,可以设置响应参数
1 | String value = getIntent().getStringExtra("key"); |
响应数据根据操作进行接收并且返回
1 | activityResultLauncher = registerForActivityResult( |
段代码是使用 Android Jetpack 的 ActivityResultContracts
类来注册一个 ActivityResultLauncher
,用于处理另一个 Activity
的启动和结果返回。这不仅仅是处理另一个 Activity
的响应,它可以用来处理任何启动 Activity
ForResult 请求的结果
getIntent().getStringExtra("key")
:- 通常在
onCreate()
或onStart()
方法中使用。 - 这个方法用于接收来自启动该 Activity 的 Intent 的数据,通常在 Activity 被创建时就能获取到。
- 通常在
ActivityResultLauncher
:- 这种方法是在启动另一个 Activity 时注册一个结果回调。
- 当启动的 Activity 结束并返回结果时,回调中的 Lambda 表达式会被执行,这时你可以通过
result.getData()
获取返回的 Intent 数据。