Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 是否可以通过一个包传递一个对象数组?_Android_Bundle - Fatal编程技术网

Android 是否可以通过一个包传递一个对象数组?

Android 是否可以通过一个包传递一个对象数组?,android,bundle,Android,Bundle,我有一个问题与你的问题相似,但略有不同。在最初的问题中,他说 假设您想启动一个新活动,并从中传递一些数据 当前的活动 第一个答案是关于把东西放在额外的位置上,所以他大概是在谈论传递意图 但是,如果您只想在同一活动的两个实例之间传递,该怎么办?例如,如果旋转屏幕,活动的“旧”实例将被销毁,并创建一个“新”实例。在它们之间传递信息的方法是通过一个包。我知道如何使用onSaveInstanceState.putXXX和.getXXX传递基本数据类型。但是如果我有一个对象数组呢?我怎样才能把这些打包传递

我有一个问题与你的问题相似,但略有不同。在最初的问题中,他说

假设您想启动一个新活动,并从中传递一些数据 当前的活动

第一个答案是关于把东西放在额外的位置上,所以他大概是在谈论传递意图

但是,如果您只想在同一活动的两个实例之间传递,该怎么办?例如,如果旋转屏幕,活动的“旧”实例将被销毁,并创建一个“新”实例。在它们之间传递信息的方法是通过一个包。我知道如何使用onSaveInstanceState.putXXX和.getXXX传递基本数据类型。但是如果我有一个对象数组呢?我怎样才能把这些打包传递?可包裹和可序列化是我唯一的选择吗*


*假设我不想使用静态变量

基本上我们这里有几个选项

选项1是使用方法。在这里,您将所有内容存储到类的实例中。Bundle需要简单的、可打包的或可序列化的类型。您也可以传递数组,但这些数组必须是这些类型的数组

选项2是覆盖并从那里返回数组。此活动的新实例可以通过调用来检索此数组。尽管此选项工作正常,但已被弃用。这就是第三种选择发挥作用的地方

选项3是使用保留片段。这里的想法是创建一个片段,并调用该片段的onCreate()或onCreateView()。一旦被调用,这个片段就会被“保留”。如果旋转设备,则每次旋转都将创建新的活动实例,但保留片段的相同实例将传递给活动的每个新实例。如果您将阵列保留在那里,它将立即在每个新活动实例中可用。这将是一条路要走


我想指出,选项1是持久的。如果你的应用程序进入后台,Android将其杀死,然后再次启动,你将把你的数组交付给onCreate(Bundle savedInstanceState)。与此相反,选项2和3将失去状态。如果您可以在每次创建活动时重新创建阵列,则可以使用选项2或3。

“是否可
打包
可序列化
我的唯一选项?”-简言之:是。但是,由于
Parcelable
优于
Serializable
(它是专门为高性能IPC创建的),因此在实现开销方面值得付出额外的努力,特别是如果您计划传递数据集的话。选项1最终是最好的。我需要坚持不懈的努力。我意识到只要我的对象
实现可序列化
我就可以了