Java 用自定义对象数组列表实例化片段第二部分

Java 用自定义对象数组列表实例化片段第二部分,java,android,android-fragments,Java,Android,Android Fragments,嗨,我在stackoverflow.com上搜索了这个问题,我在这篇文章中找到了一个答案 所有的答案都是序列化的或可打包的,我做了这个解决方案 我的问题是,好主意还是坏习惯 对象图标元素 public class IconItem { private String name; private int resId; public IconItem(String name, int resId){ this.name = name; this.resId = resId; }

嗨,我在stackoverflow.com上搜索了这个问题,我在这篇文章中找到了一个答案

所有的答案都是序列化的或可打包的,我做了这个解决方案

我的问题是,好主意还是坏习惯

对象图标元素

public class IconItem {

private String name;
private int resId;

public IconItem(String name, int resId){
    this.name = name;
    this.resId = resId;
}

public String getName(){
    return this.name;
}

public int getResId(){
    return this.resId;
}
}

碎片

public class IconsFragment extends Fragment {

private ArrayList<IconItem> myList

public static IconsFragment newInstance(ArrayList<IconItem> list) {
    IconsFragment fragment = new IconsFragment();

    myList = list;

    return fragment;
}
公共类IconsFragment扩展了片段{
私人ArrayList myList
公共静态IconsFragment新实例(ArrayList列表){
IconsFragment fragment=新的IconsFragment();
myList=列表;
返回片段;
}
}

这样,当我引用片段时,我将传递ArrayList

对于我来说,在其他片段中使用RecyclerView


这是一种不好的做法,因为您正在将整个自定义对象列表传递给片段的initializer方法,是的,大部分文章都将指导您使其可序列化或可打包,因为:

为了连载, 创建几乎任意对象的短期存储

对于包裹: 另一方面,它在很大程度上是Android SDK的产物

你可以看到关于Parcelable vs Serializable的好文章,还有一篇不错的文章

Parcelable和serialization都有助于编组和解编组java对象,从而节省堆空间。因此,对象不是直接传递的,而是经过压缩(某种程度上,不是真的)然后转发的 因此被广泛推荐

至于为什么您的方法不好并且不推荐,您正在通过一个方法发送整个自定义对象数组,如果您的数组列表太大,您可能会遇到OOM

也不建议在包裹上发送大型数组列表,因为它会引发事务异常,如下所示:

Fatal Exception: java.lang.RuntimeException: android.os.TransactionTooLargeException: data parcel size 1791812 bytes

但是对于小的自定义对象列表(这是一种不好的做法,因为您要将整个自定义对象列表传递给片段的initializer方法,是的,大部分文章都会指导您使其可序列化或可打包,因为:

为了连载, 创建几乎任意对象的短期存储

对于包裹: 另一方面,它在很大程度上是Android SDK的产物

你可以看到关于Parcelable vs Serializable的好文章,还有一篇不错的文章

Parcelable和serialization都有助于对java对象进行编组和解组,从而节省堆空间 因此被广泛推荐

至于为什么您的方法不好并且不推荐,您正在通过一个方法发送整个自定义对象数组,如果您的数组列表太大,您可能会遇到OOM

也不建议在包裹上发送大型数组列表,因为它会引发事务异常,如下所示:

Fatal Exception: java.lang.RuntimeException: android.os.TransactionTooLargeException: data parcel size 1791812 bytes

但对于小型自定义对象列表(这是一个很好的表单?我需要将ArrayList从Activity传递到Fragmentyes,因为您没有复制2个数组,在这种情况下,对象从一个类到另一个类的转移也是序列化的。虽然更推荐使用parcelable。问一个问题,当您传递5000个对象时,如果您填写RecyclerView,则信息会附带从SQL中筛选。好的,我知道代码将是optim,但一个小列表或一个简单的应用程序?什么方法会消耗更多的内存和CPU序列化程序或我的示例?谢谢你的回答和时间,我的朋友,对不起,我的英语我会说西班牙语。是的,如果你的值在5000左右,最好使用SQL Db。序列化程序方法使用了更多的CPU但是内存效率高吗?你所想到的那个也使用CPU来执行数组复制和Instance创建,还使用了大量内存。我希望这会有帮助!这是一个好的形式?我需要将ArrayList从Activity传递到Fragmentyes,因为你没有复制2个数组,而且对象从一个类到另一个类的切换也是序列化的,在这种情况下。虽然更推荐使用parcelable。问一个问题,当你传递5000个对象时,如果你去填充一个RecyclerView,则信息来自SQL的过滤器。好的,我知道代码将是optim,但是一个小列表或一个简单的应用程序?是什么方法消耗了序列化程序或我的示例更多的内存和CPU?谢谢你的回答第二次,我的朋友,对不起,我的英语是西班牙语。是的,如果你的值在5000左右,最好使用SQL Db。序列化程序方法使用了更多的CPU,但内存效率更高,你想到的方法也使用CPU执行阵列复制和Instance创建,还使用了大量内存。我希望这能有所帮助!