Android中的捆绑包有什么意义?

时间:2014-06-08 15:35:26

标签: android android-fragments android-activity bundle

如果我使用setArgs和getArgs将包从MyActivity传递给MyFragment的活动。我不能通过MyFragment构造函数传递数据对象吗?所有这些捆绑的东西是什么意思?它更快吗?

附带问题:当我绕过捆绑时,它们是否有别名?那么编辑包会改变一切吗?

3 个答案:

答案 0 :(得分:0)

需要捆绑来管理片段的生命周期并允许操作系统再次创建对象。其他信息docs

答案 1 :(得分:0)

嗯,我认为这需要一些介绍:

如果活动或片段将是f.e.摧毁他们的状态将得救。因此,系统必须保存此状态才能重新创建它。最好的办法是将其保存为字节代码,其中包含重建定义此状态的对象所需的所有信息。通过使用字节代码,这个对象的类型并不重要。将对象转换为字节代码称为序列化。

Android拥有自己的名为Parcelable的序列化机制。它比默认的Java序列化要快得多,因此它应该是在Android中使用的首选方式。

现在Bundles只接受实现Parcelable或Serializable接口的对象和原语。它们用于保存在一个地方定义活动/碎片状态的不同对象。

因为您可以传递给Fragment的参数也将被系统序列化以供将来使用,因此需要Bundle。这就是为什么Fragment应该只使用非arg构造函数并通过参数传递参数的原因。

简而言之:系统使用Bundle来保存和重新创建活动或碎片的状态。因此,系统使用一种易于阅读的数据格式,即字节码。

答案 2 :(得分:-3)

最重要的是,他们在应用程序之间工作。这使得例如使用在应用程序中编程的网站运行浏览器的可能性成为可能。如果您在通过构造函数传递数据时启动浏览器,则浏览器窗口将与您开始运行它的应用程序在同一个线程中运行。捆绑和意图使操作系统更安全。