1. 程式人生 > >Android進階AIDL使用自定義型別

Android進階AIDL使用自定義型別

原文首發於微信公眾號:jzman-blog,歡迎關注交流!

上篇文章中主要介紹從 AIDL 的使用方式以及 Android 開發中不同程序之間的通訊,遺留的問題是如何在 AIDL 中使用自定義型別,具體步驟如下:
1. 建立自定義型別
2. 宣告自定義型別
3. 定義與自定義型別相關的業務
4. 重寫業務實體類
5. 遠端呼叫
6. 驗證 AIDL

1. 建立自定義型別

自定義型別傳輸的就是一個實體物件,這個實體類必須實現 Parcelable 介面,具體如下:

// 自定義型別
public class Work implements Parcelable
{
private String title; private String content; // getter、setter、Parcelable 省略 }

2. 宣告自定義型別

建立一個 .aidl 檔案宣告剛才定義的型別,注意與具體業務 .aidl 檔案的不同,宣告具體如下:

// 在.aidl檔案中宣告自定義型別
package com.manu.aidldemo;
parcelable Work;

3. 定義與自定義型別相關的業務

在定義具體業務的 .aidl 檔案中定義與自定義型別相關的業務,具體如下:

// Declare any non-default types here with import statements
import com.manu.aidldemo.Work; //注意 interface IPersonAidlInterface { //定義與自定義型別相關的業務 Work getWorkInfo(); void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString); }

注意:匯入自定義型別,否則不識別。

4. 重寫業務實體類

由於新增了具體業務,也就是 getWorkInfo() ,需要具體業務類裡面實現具體的業務,具體如下:

//新增自定義型別相關的業務
@Override
public Work getWorkInfo() throws RemoteException {
    Work work = new Work();
    work.setTitle("學習AIDL");
    work.setContent("Android developer");
    return work;
}

5. 遠端呼叫

繫結 Service 成功之後會得到 IBinder 物件,然後通過 asInterface() 獲取到 IPersonAidlInterface 物件就可以呼叫了,具體如下:

public void callRemoteClick(View view) {
    Log.i(TAG,"遠端呼叫具體服務...");
    try {
        //遠端呼叫
        Work work = iPersonAidlInterface.getWorkInfo();
        System.out.println("這是遠端呼叫的服務資訊:title="+work.getTitle()+",content="+work.getContent());
    } catch (RemoteException e) {
        e.printStackTrace();
    }
}

6. 驗證 AIDL

日誌執行截圖如下:

使用流程實際上在上篇文章中已經闡述清楚了,這篇貌似有點多餘,不過算是對過去知識的總結吧!

如果覺得寫的不妥,可以關注公眾號:jzman-blog,一起交流學習。
這裡寫圖片描述