首页 > 编程知识 正文

android模块化和组件化,android aidl

时间:2023-05-06 12:19:44 阅读:154363 作者:1469

您需要知道如何创建内部类Parcelable,以便types对象通过AIDL传递到远程服务。 没有找到任何关于这个的信息。

这是要完成的示例代码,但Bar类中的CREATOR不是静态的,因此无法编译。 这意味着它在内部类中。 我不能让Bar成为静态的内部类。 不能在Foo类之外移动Bar (系统中的其他依赖关系)。 您还需要知道如何在AIDL文件中引用Bar类。 任何援助都是巨大的赞扬。 publicclassfooimplementsparcelable { private inta; publicfoo({}publicfoo ) parcelsource ) ) { this.a=source.readInt ); } public int describeContents () { return 0; } publicvoidwritetoparcel (parcel dest,int flags ) (dest.writeint ) this.a ); } publicstaticfinalparcelable.creator=newparcelable.creator { . } publicclassbarimplementsparcelable { priv able } } public int describeContents () { return 0; } publicvoidwritetoparcel (parcel dest,int flags ) (dest.writeint ) this.b ); } publicstaticfinalparcelable.creator creator=newparcelable.creator { . } }

我最近遇到了同样的问题,让内部类静态运行。

因为我读了为什么这个会实际工作,所以那个对我来说更有意义,所以我想分享。 内部类是嵌套在另一个类中的类,它包含对包含该类的实例的引用。 使用此引用可以访问包含类的成员。 这就好像包括类本身一样。 因此,它不能具有静态成员,因为它绑定到包含类的实例,而不是绑定到包含类。

将嵌套类声明为静态,并与包含该类的实例断开绑定。 因此,它可以具有自己的静态变量和普通类可以具有的其他内容。 当然,您无权访问包含类的成员。

答案是内部类总是可以构成自己的类。 无论内部类需要从outter类的实例中访问哪些函数,反之亦然,它们都始终可以通过接口或公共API完成。 打算让Bar成为自己的班级。 可以通过将Foo实例传递给Bar并实现相应的API来提供它,而无需考虑Foo Bar需要访问的组件。

如果外部类包含对内部类实例的引用,则可以执行以下操作:

publicclassouterclassimplementsparcelable { privateinnerclassreference; protectedouterclass (parcel source ) this.reference=newinnerclass ) source; //} @ overridepublicvoidwritetoparcel (parcel destination,int flags ) reference.writetoparcel ) destination, flags//publicclassinnerclassimplementsparcelable { protected inner class, parcel source }//readfromyourparcel.} @ overridepublicvoidwritetoparcel (parcel destination,int flags )/writetoyourparcel { @ overridepublicouterclasscreatefromparcel (parcel source ) ) returnnewouterclass (source ); } @ overridepublicouterclass [ ] new array (intsize ) returnnewouterclass (size ); } }

你的酒吧不需要Parcelable。 可以将Bar字段与Foo字段一起保存,并使用createfromparcel(parcel )方法恢复整个对象。

以下是一些代码示例。

import android.os.Parcel; import android.os.Parcelable; publicclassfooimplementsparcelable { privateintmfoodata=0; 私有bar mbar; publicfoo({}protectedfoo ) parcelin ) ) { mFooData=in.readInt ); //readingbarintbardata=in.readint (; mbar=newbar(Bardata ); } @ overridepublicvoidwritetoparcel (parcel dest,int flags ) dest.writeint ) mfoOdata ); //writingbardest.write int (mbar.getbardata (); } @ overridepublicintdescribecontents () { return 0; } publicstaticfinalcreatorcreator=new creator () ) overridepublicfoocreatefromparcel (parcel in ) returnnewfoo ) ) in; } @ overridepublicfoo [ ] new array [ intsize ] { return new foo [ size ]; }; 公共类bar { privateintmbardata=0; publicbar(intbardata ) { mBarData=barData; }公共int getbardata () { return mBarData; } publicvoidsetbardata (intmbardata ) { this.mBarData=mBarData; } }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。