关于Parcelable接口
----------------------------------
1. 需要实现抽象方法
可以不关心public int describeContents()方法的实现,直接返回任意int类型数据即可
public void writeToParcel(Parcel dest, int flags)用于表现如何将类的成员写入到Parcel容器中,实现该方法时,通常是调用参数Parcel dest的各write???()方法,将类的成员写入
2. 必须创建指定的常量
必须创建常量public static final Parcelable.Creator<T> CREATOR的对象,该常量的所有声明部分都是不可修改的,包括访问权限、修饰符、数据类型、常量名
3. 通用做法
通常会自定义void readFromParcel(Parcel source)方法,用于从Parcel容器中读取数据,并且在该方法中,使用于writeToParcel()方法中完全一致的顺序,调用Parcel source参数的read????()方法将数据读出,并赋值给类的成员。
通常会自定义带Parcel类型参数的构造方法,并在该构造方法中调用readFromParcel()方法,用于初始化类的对象。
在创建CREATOR常量时,必须实现的抽象方法中需要当前类的成员,则可以调用上述带Parcel类型参数的构造方法。
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
public class StudentService extends Service {
private String tag = "cn.com.tarena.intent_extra";
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Student stu = intent.getParcelableExtra("student");
Log.d(tag , "receive stu -> " + stu);
return super.onStartCommand(intent, flags, startId);
}
private Student getStudent() {
Student stu = new Student();
stu.name = "Jack";
stu.from = "ShangHai";
stu.age = 28;
return stu;
}
@Override
public IBinder onBind(Intent intent) {
return new InnerBinder();
}
private class InnerBinder extends IStudentDao.Stub {
@Override
public Student getStudentInformation() throws RemoteException {
return getStudent();
}
}
}
----------------------------------
1. 需要实现抽象方法
可以不关心public int describeContents()方法的实现,直接返回任意int类型数据即可
public void writeToParcel(Parcel dest, int flags)用于表现如何将类的成员写入到Parcel容器中,实现该方法时,通常是调用参数Parcel dest的各write???()方法,将类的成员写入
2. 必须创建指定的常量
必须创建常量public static final Parcelable.Creator<T> CREATOR的对象,该常量的所有声明部分都是不可修改的,包括访问权限、修饰符、数据类型、常量名
3. 通用做法
通常会自定义void readFromParcel(Parcel source)方法,用于从Parcel容器中读取数据,并且在该方法中,使用于writeToParcel()方法中完全一致的顺序,调用Parcel source参数的read????()方法将数据读出,并赋值给类的成员。
通常会自定义带Parcel类型参数的构造方法,并在该构造方法中调用readFromParcel()方法,用于初始化类的对象。
在创建CREATOR常量时,必须实现的抽象方法中需要当前类的成员,则可以调用上述带Parcel类型参数的构造方法。
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
public class StudentService extends Service {
private String tag = "cn.com.tarena.intent_extra";
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Student stu = intent.getParcelableExtra("student");
Log.d(tag , "receive stu -> " + stu);
return super.onStartCommand(intent, flags, startId);
}
private Student getStudent() {
Student stu = new Student();
stu.name = "Jack";
stu.from = "ShangHai";
stu.age = 28;
return stu;
}
@Override
public IBinder onBind(Intent intent) {
return new InnerBinder();
}
private class InnerBinder extends IStudentDao.Stub {
@Override
public Student getStudentInformation() throws RemoteException {
return getStudent();
}
}
}