天天看點

關于AIDL和BinderPool遇到的幾個坑

1、服務端的自定義對象 和 用戶端自定義對象保持一緻。”要内容一字不差 ,包名都要一樣“

最好的做法是直接拷貝過去

2、在使用BinderPool伺服器處理傳遞過來的資料的位置

舉例:

public class BookManagerImpl extends IBookManager.Stub {
    private final static String TAG = BookManagerImpl.class.getSimpleName();
    private List<Book> mSaveBooks = new ArrayList<>();

    public BookManagerImpl() {
        Log.d(TAG," 我被執行個體化了.....(bookManager)......... ");
    }
    @Override
    public List<Book> getBooks() throws RemoteException {
        StringBuilder sb = new StringBuilder();
        for(Book book:mSaveBooks){
            sb.append(book.toString()+"\n");
        }
        Log.d(TAG,"getBooks()  " + sb.toString());
        Log.d(TAG,"getBooks()  " + sb.toString());
        Log.d(TAG,"getBooks()  " + sb.toString());
        return mSaveBooks;
    }

    @Override
    public void addBook(Book book) throws RemoteException {
        Log.d(TAG, "addBook()  " + book.toString());
        mSaveBooks.add(book);
    }
}
           

我加Log的地方就是處理的地方,這樣這個類伺服器和用戶端就可以不一樣了,在我的Demo裡面如果改了伺服器然後重裝app第一次點選用戶端會挂的,關掉重開用戶端就可以了。

附上Demo位址:

http://download.csdn.net/download/qq_36141543/10184724

就這樣吧,demo比較詳細

繼續閱讀