Lan*_*aft 6 android parcel parcelable aidl
我有一个.aidl文件,它定义了一个接口类型的单个parcelable,比方说
parcelable MyInterface;
Run Code Online (Sandbox Code Playgroud)
因此,MyInterface是在MyInterface.java中声明的Java接口,它扩展了Parcelable接口.android parcelable机制要求我在parcelable类中定义一个静态CREATOR.但是,如何为接口执行此操作,因为接口类不知道具体实现,因此无法实现createFromParcel()方法?
android运行时将如何决定调用哪个CREATOR(来自哪个子类)?甚至不可能在.aidl文件中使用接口类型?
第一步:-创建另一个.aidl文件,该文件将用于定义Student类(Parcelable类)。
(Student.aidl)
package com.aidl;
parcelable Student;
Run Code Online (Sandbox Code Playgroud)
我们写这篇文章是因为aidl可以检测到Student类。
第二步:-现在您必须定义一个名称为Student的Java类,并在该类中实现可解析的接口。解析接口有两个抽象方法,您必须在学生课堂中实现。
import android.os.Parcel;
import android.os.Parcelable;
public class Student implements Parcelable {
public String name;
public String father_name;
public Student(Parcel source)
{
name = source.readString();
father_name = source.readString();
}
public Student()
{}
public void setName(String name)
{
this.name = name;
}
public void setFatherName(String father_name)
{
this.father_name = father_name;
}
Run Code Online (Sandbox Code Playgroud)
//解析接口的方法
@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
// TODO Auto-generated method stub
dest.writeString(name);
dest.writeString(father_name);
}
Run Code Online (Sandbox Code Playgroud)
在任何正在实施Parcelable的类中,都必须提供CREATOR字段。CREATOR的类型必须为Parcelable.Creator。在这里,我们用T代替T来写类的名称。学生。在解组对象期间使用CREATOR。
它有两种方法–
1-T createFromParcel(Parcel parcel) :This method is called when UnMarshalling happen
during receiving the data. Keep care that we receive the data member in same sequence
as we write in writeToPacel(). Here we create a constructor in which we demarshalling
the data.
2-NewArray(int size) : Here we just create an array of given size and return.
public static final Parcelable.Creator<Student> CREATOR = new Parcelable.Creator<Student>() {
@Override
public Student createFromParcel(Parcel source) {
// TODO Auto-generated method stub
return new Student(source);
}
@Override
public Student[] newArray(int size) {
// TODO Auto-generated method stub
return new Student[size];
}
};
Run Code Online (Sandbox Code Playgroud)
有关更多信息:在这里检查
小智 3
关于 AIDL 文件中的使用接口:我认为没有什么可以阻止您这样做。因为“可打包 MyInterface;” 实际上不会在 gen 文件夹中生成任何内容,它只是使用此 MyInterface 类型的任何 AIDL 接口的函数签名所需要的。
CREATOR 您必须为所有实现 android.os.Parcelable 的类添加创建者定义。
归档时间: |
|
查看次数: |
9630 次 |
最近记录: |