Android开发之数据传递的桥梁——Bundle

这篇具有很好参考价值的文章主要介绍了Android开发之数据传递的桥梁——Bundle。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

解释

在安卓sdk源码中,Bundle类的说明是这样的

A mapping from String keys to various Parcelable values.
See Also:
PersistableBundle

public final class Bundle extends BaseBundle implements Cloneable, Parcelable

字符串的键到持久化值的映射。

作用

经常被用作Activity跳转时传递数据,也时常被用作Handler传递Message时携带数据。

Activity跳转时传递数据最常见

Bundle bundle = new Bundle();

Android开发之数据传递的桥梁——BundleAndroid开发之数据传递的桥梁——BundleAndroid开发之数据传递的桥梁——Bundle

Android开发之数据传递的桥梁——Bundle

 所有可传递的数据类型如上图。

不过,在开发过程过程中,迭代是不可避免的,随着需求和业务增多,页面之后传递的值也可能会逐渐增多,如果接手别人迭代过的项目,可能页面传递的值多的根本看不懂,也不能轻易删除,牵一发而动全身。也可能会把自己的烂摊子留给其他人,此时,如果能留下一手漂亮的迭代版本,成就感会很强。

所以如何避免随着迭代导致的传递数据困难呢?可以用实体类封装传递的数据。

但是实体类是一个(object)对象,而bundle又不支持传递对象。可能有开发经验的同学知道用序列化的方式传递对象,当然也不失为很好的一种方法。

这里我有一个粗鄙的方法分享一下(实体类如果用java的方式表现,可能代码量会很大,这里我用kotlin做了简化):

data class MyData(
    var user: String = "",
    var name: String = "",
    var age: String = "",
    var height: String = "",
    var width: String = "",
    var weight: Int = 0,
    var father: Int = -1,
    var mother: Int = 0,
    var son: Int = 0,
    var daughter: String = "",
    var sister: String? = "",
    var brother: String? = "",
    var friend: String = ""
) {
    override fun toString(): String {
        return "{user:\"$user\"," +
                "name:\"$name\"," +
                "age:\"$age\"," +
                "name:\"$name\"," +
                "height:\"$height\"," +
                "width:\"$width\"," +
                "weight:\"$weight\"," +
                "father:\"$father\"," +
                "mother:\"$mother\"," +
                "son:\"$son\"," +
                "daughter:\"$daughter\"," +
                "sister:\"$sister\"," +
                "brother:\"$brother\"," +
                "friend:\"$friend\"}"
    }
}

重写toString方法,把实体类的字段转化成json类型,这样就可以通过putString的方式把这个实体类传递到目标Activity;

在目标Activity中通过Gson工具把json字符串转化成实体类对象就可以完成传递。

val myData = Gson().fromJson("", MyData::class.java)

这种方式传递,可以有效避免因为迭代增加传递量的增大导致的代码阅读难度高,逻辑复杂等问题。

后期增加字段时,只需要给实体类增加一个字段,然后扩充一下toString方法中的json字段就可以完成需求,这种零存整取的方法不仅看着简介,使用起来也很方便。

如果有同学使用过EventBus,也可以完成上述需求。不过我个人不太推崇EventBus。因为如果项目迭代过程中代码量增大,EventBus乱用会导致逻辑非常复杂。尤其是UI和Data交互时,大量的EventBus重写的方法会让逻辑交互产生很多耦合现象。

EventBus比较适合用于小项目,或者模块之间的数据传递,Activity之间的数据传递尽可能使用原生的Bundle。

Handler中传递Message的用法和Acvitiy基本一样。Message的优势在与可以直接传递Object

val camera = Camera()
val message = Message()
message.what = 0x00
message.obj = camera
handler?.sendMessage(message)

建议

可能有人尝试过用Bundle携带Bitmap这样的对象,遇到过报错。

对于这种占用空间很大的对象,不建议或者说禁用Bundle传递,最好的做法是把这样的对象保存到本地,然后传递url的方式,在目标Activity中重写加载读取对象。文章来源地址https://www.toymoban.com/news/detail-486910.html

到了这里,关于Android开发之数据传递的桥梁——Bundle的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android Studio中如何在Activity跳转之间传递数据

    使用Intent操作可以完成两个Activity之间的跳转,有时候也相应的需要在两个跳转活动之间传递数据,这篇就详细的介绍一些在Android开发中一些基础的活动跳转时传递数据的方法 调用PutExtra()方法 由于Activity之间的数据传递有许多不同种类型,所以在Inten类中提供了多个重载的

    2023年04月08日
    浏览(77)
  • iOS开发集成framework、Bundle文件获取

    有些时候,我们开发的SDK并不需要对外隐藏,那么就可以将源码都打包给对方,也可以集成cocopods仓库,供外部使用。但有些时候,出于版权等原因,我们提供的代码只希望对方能够正常使用,却不希望对方看到内部的实现细节,就像苹果官方一样,给我们开发者提供的API只

    2024年02月12日
    浏览(35)
  • 使用apktool、aapt2、bundletool将apk转为aab(Android App Bundle)

    上一篇文章我们讲了AAPT2命令行使用总结,里面有个使用场景就是将apk转为aab文件,aab文件是应用上架Google play的指定包格式,下面我们就来实践下 假如我们有这样一个场景需求,一个游戏或者应用接入了我们开发的聚合SDK,然后提供给我们一个apk包,我们拿到这个apk包可以

    2023年04月27日
    浏览(62)
  • Vue3前端开发,父组件给子组件传递数据练习

    Vue3前端开发,父组件给子组件传递数据练习!还是借用刚刚的组件模板,来开展父传子的练习。 依旧是需要借助官方提供的宏函数来接收数据。defineProps. 这个是父组件里面的内容。我们自定义了2个变量,一个是车厘子单价。一个是纯文本。 一个数字类型,一个文本类型。都

    2024年01月22日
    浏览(48)
  • vue前端开发自学,子组件传递数据给父组件,使用$emit

    vue前端开发自学,子组件传递数据给父组件,使用$emit 父子组件之间互相传递数据的情况非常常见,下面为大家介绍的是,来自子组件,给父组件传递数据的情况。 如图,以上代码是父组件的代码情况,ComponentEvent.vue。 可以看出来,里面的特殊点,在于,有个子组件的引用和标

    2024年01月23日
    浏览(43)
  • node+vue开发环境下接口数据传递中的跨域问题

    大部分浏览器自带的保护措施,限制用户在一个域名下请求另一个域名的数据 跨域对于前后端开发者来说,就像一块狗皮膏药,无论是面试还是开发中,都会经常遇到。 之所以出现跨域问题,是因为浏览器的同源策略,为了隔离潜在的恶意文件,为了防御来自歪门邪道的攻

    2024年01月24日
    浏览(54)
  • vue前端开发自学练习,Props数据传递-类型校验,默认值的设置!

     vue前端开发自学练习,Props数据传递-类型校验,默认值的设置! 实际上,vue开发框架的时候,充分考虑到了前端开发人员可能会遇到的各种各样的情况,比如大家经常遇到的,数据类型的校验,再比如,默认值的设定等等。下面给大家展示一下,源码。和实际的效果。 如图,

    2024年01月23日
    浏览(39)
  • vue前端开发自学,父子组件传递数据,借助于Props实现子传父

    vue前端开发自学,父子组件传递数据,借助于Props实现子传父! 之前我们说过,Props这个是用在父传子的情况下,今天为大家介绍的代码,就是在父组件里,自定义事件,绑定一个函数,让子组件可以接受到这个自定义事件绑定的函数,从而“委婉”的传递数据给父组件。 如图

    2024年01月23日
    浏览(42)
  • Vue3前端开发,provide和enject的基础练习,跨层级传递数据

    Vue3前端开发,provide和enject的基础练习,跨层级传递数据! 声明:provide虽然可以跨层级传递,但是依旧是需要由上向下的方向传递。根传子的方向。 这个是入口组件的内容,我们调用了一个中间组件Middle.vue。 这个是中间组件的内容,我们调用了一个三级组件Three.vue. 这个是第三

    2024年01月22日
    浏览(50)
  • node+vue+express开发环境下接口数据传递中的跨域问题

    大部分浏览器自带的保护措施,限制用户在一个域名下请求另一个域名的数据 跨域对于前后端开发者来说,就像一块狗皮膏药,无论是面试还是开发中,都会经常遇到。 之所以出现跨域问题,是因为浏览器的同源策略,为了隔离潜在的恶意文件,为了防御来自歪门邪道的攻

    2024年02月19日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包