最近在使用AIDL作IPC的時候,在處理複雜的數據類型的時候,編譯器老是報couldn't find import for class錯誤,因此在這裏總結下AIDL使用的時候的一些注意事項,但願對你能有所幫助。html
Android 中進程間通訊使用了 AIDL 語言,可是支持的數據類型有限:android
1.Java的簡單類型(int、char、boolean等)。不須要導入(import)。ide
2.String和CharSequence。不須要導入(import)。ui
3.List和Map。但要注意,List和Map對象的元素類型必須是AIDL服務支持的數據類型。不須要導入(import)。spa
4.AIDL自動生成的接口。須要導入(import)。code
5.實現android.os.Parcelable接口的類。須要導入(import)。component
其中後兩種數據類型須要使用import進行導入。htm
剛開始想固然的覺得傳遞Object只要實現了Parcelable接口在AIDL文件中導入便可, 而後編譯器立刻戰勝了個人天真,couldn't find import for class!!!,好吧仍是老老實實的去看文檔吧。AIDL文檔連接對象
解決這個錯誤的步驟以下:blog
1.確保你的類已經實現了 Parcelable接口
2.實現writeToParcel方法,將對象的當前狀態寫入
Parcel
3.添加一個叫 CREATOR
的靜態字段,它實現了 Parcelable.Creator
4.最後建立一個對應的*.aidl文件去聲明你的Parcelable類
例如
package android.graphics; // Declare Rect so AIDL can find it and knows that it implements // the parcelable protocol. parcelable Rect;
import android.os.Parcel; import android.os.Parcelable; public final class Rect implements Parcelable { public int left; public int top; public int right; public int bottom; public static final Parcelable.Creator<Rect> CREATOR = new Parcelable.Creator<Rect>() { public Rect createFromParcel(Parcel in) { return new Rect(in); } public Rect[] newArray(int size) { return new Rect[size]; } }; public Rect() { } private Rect(Parcel in) { readFromParcel(in); } public void writeToParcel(Parcel out) { out.writeInt(left); out.writeInt(top); out.writeInt(right); out.writeInt(bottom); } public void readFromParcel(Parcel in) { left = in.readInt(); top = in.readInt(); right = in.readInt(); bottom = in.readInt(); } }