为了活动小家电-Intent

65 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第29天,点击查看活动详情

Intent

  • 在Android系统中,当Activity A向系统发出请求时,系统执行Activity B。
  • 意图可以表示为“传递给系统以执行组件的信息”。
  • 当包含有关要执行的组件的信息的意图被配置并传递给系统时,系统分析意图信息并执行适当的组件的结构。
  • 意图的使用降低了组件之间的耦合程度,提高了可维护性。

显式Intent

  • 如何将要执行的组件的类名放在intent中(主要在运行同一个app的组件时使用)
  • 使用函数 startActivity() 向系统请求意图。

隐式Intent

  • 利用意图过滤器信息,而不是类名(在执行类名未知的外部应用程序的组件时使用)
  • 通过提供与 AndroidManifest.xml 文件中定义的意图过滤器信息相同的值来执行
  • 用于隐式意图的意图过滤器具有操作、类别和数据标签。
  • action :一个字符串,指示组件具有哪些功能
  • category :用于指示组件属于哪个类别
  • data :用于指定有关运行组件所需数据的详细信息
  • 必须在意图过滤器中声明
  • 如果intent中包含的类别信息在intent-filter中,则可执行
  • 数据信息表示为 URL 字符串形式的 Uri 对象

传递数据

  • 额外数据可用于在活动之间传递数据
  • 在意图发生之前,使用 putExtra() 函数将数据放入意图对象并传递
  • 它包含作为键和值的数据,并且可以传递所有类型的数据,例如字符串、数字、布尔值和对象。
  • 使用 getIntent() 函数获取意图对象并使用它

ActivityForResult

  • 使用 startActivityForResult() 函数自动终止 Intent 启动的 Activity 并再次返回。
  • startActivityForResult(intent, 10) 中的第二个参数是requestCode值,开发者使用这个值可以任意指定0或更大的值来区分返回的是哪个请求。
  • 可以使用 setResult() 函数指定状态,并通过指定 Result_OK 通知活动已完成

Serializable与Parcelable

Serializable

  • 使用 Java 的标准界面,配置简单且易于使用
  • 它使用反射来处理序列化,在处理过程中会创建很多额外的对象,存在性能下降、耗电、速度慢等缺点。
  • 什么是序列化?
  • 它是指将数据转换为字节形式以便Java系统内部使用的对象或数据可以在外部Java系统中使用的技术,以及将转换为字节的数据转换回对象的技术(反序列化)。
  • 序列化的优点:通过将对象存储在文件中来提供持久性,而不管输入/输出格式如何,并且可以通过网络轻松交换对象。
  • 什么是反射?
    • 一种通过对象分析类信息的编程技术
  • 即使不知道具体的类类型,也可以使用编译后的字节码找出类信息
  • 对象转移的3个步骤
  1. 将序列化对象分解为字节。(编组:将数据转换成字节块成可以发送到流的形式)
  2. 序列化和分解后的数据按顺序传输。
  3. 将接收到的数据恢复到其原始状态。(解组)

Parcelable

  • 这是Android SDK提供的序列化接口。
  • 它被设计为在内部不使用反射,但开发人员必须指定如何处理序列化。
  • 因此,它具有性能优势,但也存在诸如增加样板代码和增加维护复杂度等缺点。
  • Parcelable 更容易与 Kotlin 的 @Parcelize 一起使用