Jetpack架构组件学习(3)——Activity Results API使用
2023-09-05 02:28:49
页面跳转传值一直使用的是startActivityForResult方法,如今有了新的API实现方式,学习并稍微总结下.
1.前言
Activity Results API是Android Jetpack中一个新的API,它提供了一种更简单、更结构化的方式来处理异步结果。在本文中,我们将介绍如何使用Activity Results API,并将其与其他异步编程方法进行比较。
2.为什么我们需要Activity Results API?
传统的异步编程方法,如回调、RxJava和LiveData,都存在一些缺点。回调容易出错,RxJava和LiveData的学习曲线陡峭。Activity Results API提供了一种更简单、更结构化的方式来处理异步结果。它不需要编写任何回调,而且它的API非常简单。
3.如何使用Activity Results API?
Activity Results API的使用非常简单。首先,我们需要在清单文件中声明一个ActivityResultLauncher。ActivityResultLauncher是一个类,它负责启动一个活动并接收结果。
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".SecondActivity" />
接下来,我们需要在MainActivity中创建一个ActivityResultLauncher对象。
private val startForResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == Activity.RESULT_OK) {
// 处理结果
}
}
最后,我们可以使用ActivityResultLauncher对象来启动一个活动。
startForResult.launch(Intent(this, SecondActivity::class.java))
4.Activity Results API与其他异步编程方法的比较
Activity Results API与其他异步编程方法相比,具有以下优势:
- 更简单 :Activity Results API的API非常简单,不需要编写任何回调。
- 更结构化 :Activity Results API提供了一种更结构化的方式来处理异步结果。
- 更安全 :Activity Results API避免了回调中常见的一些错误。
5.何时使用Activity Results API?
Activity Results API非常适合用于处理简单的异步任务,例如启动一个活动并接收结果。对于更复杂的异步任务,可以使用RxJava或LiveData。
6.Activity Results API的示例
以下是一个使用Activity Results API的示例。这个示例演示了如何启动一个活动并接收结果。
class MainActivity : AppCompatActivity() {
private val startForResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == Activity.RESULT_OK) {
// 处理结果
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 启动一个活动
startForResult.launch(Intent(this, SecondActivity::class.java))
}
}
这个示例演示了如何使用Activity Results API来启动一个活动并接收结果。
7.结论
Activity Results API是一种新的API,它提供了一种更简单、更结构化、更安全的方式来处理异步结果。它非常适合用于处理简单的异步任务,例如启动一个活动并接收结果。对于更复杂的异步任务,可以使用RxJava或LiveData。