2017-05-14 5 views
0

ich eine Klasse definieren, die Parcelable implementiert, wie folgt aus:So verwenden Parcel in AIDL

public class Book implements Parcelable 

Und ich weiß, dass ich diese Klasse in AIDL wie diese Datei verwenden können:

import com.okay.demo.aidl.bean.Book; 
interface IBookManager { 
    void addBook(in Book book); 
} 

Aber was Ich möchte wissen, dass kann ich nur Parcelable in AIDL-Datei annehmen, ich kenne die Implementierungsklasse nicht? Kann ich so verwenden Parcelable gerade:

interface IBookManager { 
    void addData(in Parcelable data); 
} 

ich versucht hatte, Book mit Parcelable ersetzen, aber es hat nicht funktioniert.

Oder kann es das nicht in AIDL tun?

+1

nein, Sie nicht 'Parcelable' Schnittstelle hier verwenden können, hat es eine sein Klasse, die diese Schnittstelle implementiert – pskink

+0

Natürlich können Sie Parcelable für IPC so verwenden, nur nicht mit Out-of-Box-AIDL-Tool. Schau dir diese Bibliothek an, die ich geschrieben habe: https://github.com/chdir/aidl2. Es erzeugt Code, der Binder-Objekte direkt verwendet, um Laufzeit-definierte Parcelables, Serialisables und sogar andere IPC-Schnittstellen zwischen Prozessen zu übergeben. – user1643723

Antwort

0

Android documentation sagt, dass Sie eine AIDL-Datei für Ihre Klasse Book erstellen sollten.

import com.okay.demo.aidl.bean.Book; 

// Declare Rect so AIDL can find it and knows that it implements 
// the parcelable protocol. 
parcelable Book; 

Mit dieser neuen Datei, haben Sie jetzt Book in Ihrer AIDL Datei verwenden können: Ihre Book.aidl aussehen sollte

import com.okay.demo.aidl.bean.Book; 

interface IBookManager { 
    void addData(in Book book); 
}