java–Parcelable在没有正确实现的情况下工作

java–Parcelable在没有正确实现的情况下工作,第1张

概述在Android应用程序中,我将一个Bundle从一个Activity发送到一个Fragment.publicclassBarimplementsParcelable{privateMap<String,String>hash;privateintid;protectedBar(Parcelin){id=in.readInt();}publicBar(intid,Map<String,String>map){

在Android应用程序中,我将一个Bundle从一个Activity发送到一个Fragment.

public class bar implements Parcelable {private Map<String, String> hash;private int ID;protected bar(Parcel in) {    ID = in.readInt();}public bar(int ID, Map<String,String> map){    this.hash=map;    this.ID=ID;}public static final Creator<bar> CREATOR = new Creator<bar>() {    @OverrIDe    public bar createFromParcel(Parcel in) {        return new bar(in);    }    @OverrIDe    public bar[] newArray(int size) {        return new bar[size];    }};@OverrIDepublic int describeContents() {    return 0;}@OverrIDepublic voID writetoParcel(Parcel parcel, int i) {    parcel.writeInt(ID);}}

我已经使用AndroID Studios实现Parcelable inteli sense帮助并自动生成上面的代码,它没有Map的实现.

当我把这个发送到我的Fragment时:

 Map<String,String> map = new HashMap<String, String>();    map.put("foo","bar");    map.put("foobar","barfoo");    bar foo = new bar(1,map);    MyFragment fragment = new MyFragment();    Bundle bundle = new Bundle();    fragment.setArguments(bundle);    bundle.putParcelable("foo",foo);    FragmentTransaction fragmentTransaction =      getSupportFragmentManager().beginTransaction();    fragmentTransaction.add(R.ID.container, fragment, "foo");    fragmentTransaction.commit();

不知何故,Map似乎包含片段中出现的内容.为什么是这样?我会想到的行为是ID被转移并且Map被跳过.
只需创建一个Activity,一个片段和我的bar并将其作为Bundle发送即可重复此 *** 作.
我试过寻找答案,但我不确定如何制定问题.

它是一个应该以这种方式工作的错误或功能吗?

解决方法:

Parceling是懒惰地进行的,这意味着当你将它传递给Fragment时,你的bar实例不会被分割.即writetoParcel未被调用.

Parceling相当昂贵(就资源而言),所以如果可能的话最好避免使用它.如果未将Bundle发送到另一个进程,则无需将其包裹起来.通常在涉及IPC时进行分区.因此,即使在配置更改期间也不需要打包Bundle.但是,如果在活动处于后台时您的进程被终止,则Bundle将被包围,因为它存储在另一个进程中.
当您在Intent中发送它时也是如此.

因此,在您的情况下,当实例被实际分配时,Map将丢失.它只是仍然存在,因为它不是真正的分区,而Fragment接收完全相同的bar实例.

总结

以上是内存溢出为你收集整理的java – Parcelable在没有正确实现的情况下工作全部内容,希望文章能够帮你解决java – Parcelable在没有正确实现的情况下工作所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1119605.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存