Android開發(fā)AIDL進(jìn)程通信乎串,超簡單實(shí)現(xiàn)

【非好文斋配,寫的不對之處歡迎指正」喙耄】

寫在前面:

可能是執(zhí)念在作怪,一直想要自己手寫一個AIDL坏瞄,翻閱網(wǎng)絡(luò)上很多資料桂对,介紹很多,可是就是在敲代碼的時(shí)候遇到一些問題鸠匀,實(shí)在沒辦法就去看文檔敲蕉斜,打算用極其簡單的方式表達(dá)。讓初學(xué)者能用最簡單的方式完成一次不同進(jìn)程間的通信缀棍。


介紹:

https://developer.android.google.cn/guide/components/aidl Developers開發(fā)文檔

AIDL是什么宅此?

官方文檔是這么介紹的:AIDL(Android 接口定義語言)與您可能使用過的其他 IDL 類似。 您可以利用它定義客戶端與服務(wù)使用進(jìn)程間通信 (IPC) 進(jìn)行相互通信時(shí)都認(rèn)可的編程接口爬范。

簡單來講就是不同進(jìn)程進(jìn)行通信的一種手段父腕,在Android開發(fā)過程中,兩個不同的進(jìn)程是不可以互相通信的青瀑,那么我們就可以借助AIDL來實(shí)現(xiàn)兩個進(jìn)程通信璧亮。

說到這里那么我們會問,那么如何來編寫呢斥难?怎么去實(shí)現(xiàn)AIDL呢枝嘶?

  • 首先,我們準(zhǔn)備兩個端哑诊,一個客戶端一個服務(wù)端群扶,這個時(shí)候想要吐槽一下,網(wǎng)上有文章說要兩個端的包名要一樣,起初看到這里愣了很久竞阐。兩個包名一樣缴饭,怎么安裝啊。馁菜。茴扁。。

  • 其次創(chuàng)建AIDL文件

  • 服務(wù)端創(chuàng)建一個服務(wù)

  • 客戶端創(chuàng)建服務(wù)器鏈接

以上四個步驟汪疮,完成一個簡單的AIDL操作峭火。

首先創(chuàng)建工程:

1539920682050.png

創(chuàng)建兩個工程完成之后我們就開始來寫服務(wù)端。


這個時(shí)候需要注意一點(diǎn)智嚷,AIDL能傳遞的參數(shù)

  • Java 編程語言中的所有原語類型(如 int卖丸、longchar盏道、boolean 等等)

  • String

  • CharSequence

    List 中的所有元素都必須是以上列表中支持的數(shù)據(jù)類型稍浆、其他 AIDL 生成的接口或您聲明的可打包類型。 可選擇將 List 用作“通用”類(例如猜嘱,List<String>)衅枫。另一端實(shí)際接收的具體類始終是 ArrayList,但生成的方法使用的是 List 接口朗伶。

    Map 中的所有元素都必須是以上列表中支持的數(shù)據(jù)類型弦撩、其他 AIDL 生成的接口或您聲明的可打包類型。 不支持通用 Map(如 Map<String,Integer> 形式的 Map)论皆。 另一端實(shí)際接收的具體類始終是 HashMap益楼,但生成的方法使用的是 Map 接口。

這是文檔上的原話点晴。

另外還有一種方式就是實(shí)現(xiàn)Java的序列化:Parcelable

服務(wù)端編寫

首先在項(xiàng)目工程中創(chuàng)建一個AIDL見下圖

1539921484239.png
// 這個修改掉就好了感凤,改成你想要的名字 ,還會生存一個模板方法粒督,你不需要刪掉就好了
?
// IRemoteServer.aidl
package com.xingge.server;
?
// Declare any non-default types here with import statements
?
interface IRemoteServer {
   int handleNoThing(int s);
}
?
/**
我這里很簡單陪竿,沒有考慮到服務(wù)端和客戶端進(jìn)行通行,只是簡單的客戶端開啟服務(wù)端
*/

#### 創(chuàng)建完畢之后記得點(diǎn)下AS上面的錘子坠陈,或者Build-> Make Project萨惑。

完成之后你會發(fā)現(xiàn)在server-Build->generated->source-> 生成一個aidl文件,內(nèi)部有一個IRemoteServer接口 這里面有很多代碼仇矾,這里就不做介紹了庸蔼,想要看的童鞋,可以去看看贮匕,遇到好玩的或者有些坑都可以在下面留言一起進(jìn)步.

接著寫我們的服務(wù)代碼

/**
 * 佛曰:
 * 寫字樓里寫字間姐仅,寫字間里程序員;
 * 程序人員寫程序,又拿程序換酒錢掏膏。
 * 酒醒只在網(wǎng)上坐劳翰,酒醉還來網(wǎng)下眠;
 * 酒醉酒醒日復(fù)日馒疹,網(wǎng)上網(wǎng)下年復(fù)年佳簸。
 * 但愿老死電腦間,不愿鞠躬老板前颖变;
 * 奔馳寶馬貴者趣生均,公交自行程序員。
 * 別人笑我忒瘋癲腥刹,我笑自己命太賤马胧;
 * 不見滿街漂亮妹,哪個歸得程序員衔峰?
 * ================================================
 * 作    者:Yno (hxx)
 * 版    本:
 * 創(chuàng)建日期:2018/10/19   10:41
 * 包    名: com.xingge.server
 * 描    述:
 * 修訂歷史:
 * ================================================
 */
public class DDService extends Service {
?
 @Override
 public void onCreate() {
     super.onCreate();
     System.out.println("DDService onCreate........" + "Thread: " + Thread.currentThread().getName());
 }
?
 @Nullable
 @Override
 public IBinder onBind(Intent intent) {
     Toast.makeText(this, "服務(wù)器開啟", Toast.LENGTH_SHORT).show();
     System.out.println("服務(wù)器開啟");
     return mServer;
 }
?
 // 中間橋梁
 private final IRemoteServer.Stub mServer = new IRemoteServer.Stub() {
     @Override
     public int handleNoThing(int s) throws RemoteException {
         return s;
         }
      };
  }
?
// 在AndroidManisfest.xml 
 <service
     android:name=".DDService"
     android:enabled="true"
     android:exported="true">
?
     <intent-filter>
       <action android:name="IRemoteServer" />
       </intent-filter>
    </service>
是不是很簡單佩脊,服務(wù)端代碼就寫好了。 Activity里面不做任務(wù)操作垫卤。

客戶端

上面完成服務(wù)端威彰,下面我們就來完成下客戶端代碼。

再次之前穴肘,我們需要了解那些知識內(nèi)容呢抱冷?

不了解的可以根據(jù)上面的地址詳細(xì)的看下。

客戶端同樣的需要創(chuàng)建一個AIDL文件梢褐,要保證AIDL文件和服務(wù)端的AIDL相同,你也可以直接拷貝過去赵讯,不過需要注意一點(diǎn)盈咳。

1539928046426.png

加紅標(biāo)注的位子是你需要注意的,這個報(bào)名要注意更改边翼。和當(dāng)前項(xiàng)目的包名是一至的鱼响。到這一步和服務(wù)端創(chuàng)建的時(shí)候是相同的。沒什么區(qū)別组底,就不在做詳細(xì)的講解了丈积。

客戶端代碼

public class MainActivity extends AppCompatActivity {
    private Button button;
    // 獲取進(jìn)程橋梁對象
    private IRemoteServer mServer;
    // 創(chuàng)建服務(wù)鏈接
    private ServiceConnection mConnection = new ServiceConnection() {
   @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
       Toast.makeText(MainActivity.this, "Service connected", Toast.LENGTH_SHORT).show();
 // 初始化。
       mServer = IRemoteServer.Stub.asInterface(service);
   }  
?
   @Override
   public void onServiceDisconnected(ComponentName name) {
       Toast.makeText(MainActivity.this, "Service disconnected",  Toast.LENGTH_SHORT).show();
     // 服務(wù)關(guān)閉
       mServer = null;
    }
 };
?
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      button = findViewById(R.id.button);
?
      button.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
        // 
        Intent intent = new Intent(IRemoteServer.class.getName());
        intent.setClassName("com.xingge.server", "com.xingge.server.DDService");
        // 進(jìn)行綁定债鸡。
        bindService(intent, mConnection, BIND_AUTO_CREATE);
        }
     });
   }
}


這樣一個簡單的進(jìn)程通信就完成了江滨。


GIF.gif

上面就是軟件演示圖了。厌均。唬滑。OVER。

?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市晶密,隨后出現(xiàn)的幾起案子擒悬,更是在濱河造成了極大的恐慌,老刑警劉巖稻艰,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件懂牧,死亡現(xiàn)場離奇詭異,居然都是意外死亡尊勿,警方通過查閱死者的電腦和手機(jī)僧凤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來运怖,“玉大人拼弃,你說我怎么就攤上這事∫≌梗” “怎么了吻氧?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長咏连。 經(jīng)常有香客問我盯孙,道長,這世上最難降的妖魔是什么祟滴? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任振惰,我火速辦了婚禮,結(jié)果婚禮上垄懂,老公的妹妹穿的比我還像新娘骑晶。我一直安慰自己,他們只是感情好草慧,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布桶蛔。 她就那樣靜靜地躺著,像睡著了一般漫谷。 火紅的嫁衣襯著肌膚如雪仔雷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天舔示,我揣著相機(jī)與錄音碟婆,去河邊找鬼。 笑死惕稻,一個胖子當(dāng)著我的面吹牛竖共,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播俺祠,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼肘迎,長吁一口氣:“原來是場噩夢啊……” “哼甥温!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起妓布,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤姻蚓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后匣沼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體狰挡,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年释涛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了加叁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡唇撬,死狀恐怖它匕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情窖认,我是刑警寧澤豫柬,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站扑浸,受9級特大地震影響烧给,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜喝噪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一础嫡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧酝惧,春花似錦榴鼎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至缺亮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間桥言,已是汗流浹背萌踱。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留号阿,地道東北人并鸵。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像扔涧,于是被迫代替她去往敵國和親园担。 傳聞我的和親對象是個殘疾皇子届谈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評論 2 350

推薦閱讀更多精彩內(nèi)容