AIDL-基本使用
成都創(chuàng)新互聯(lián)公司專注于向陽網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供向陽營銷型網(wǎng)站建設(shè),向陽網(wǎng)站制作、向陽網(wǎng)頁設(shè)計、向陽網(wǎng)站官網(wǎng)定制、小程序設(shè)計服務(wù),打造向陽網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供向陽網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
AIDL-自定義數(shù)據(jù)類型
AIDL-修飾符in,out,inout
AIDL-重連方法
AIDL-接口注冊/解注冊
AIDL-連接池
為什么要特意講解一下接口的注冊與取消注冊呢,因為在使用AIDL進(jìn)程跨進(jìn)程通信的時候, 每次傳遞的接口對象在內(nèi)存中的地址都是不一樣的 ,所以在注冊了之后,無法使用常規(guī)的方式去取消, 因為注冊和解注冊傳遞的接口地址都不一樣 ,系統(tǒng)無法識別
由于上面的問題,AIDL中提供了一個專門解決上述情況的類 RemoteCallbackList ,其工作原理就是:
首先,在前面講解 AIDL的基本使用 的基礎(chǔ)上先增加新的AIDL接口以及注冊和解注冊方法:
然后就是 RemoteCallbackList 的使用方法了:
注冊/解注冊很簡單
接著是使用接口的方式:
ps: 需要注意的是 beginBroadcast() 方法和 finishBroadcast() 方法 必須配合使用 ,哪怕只是簡單的獲取集合大小
使用AIDL進(jìn)行跨進(jìn)程間通信中,往往我們是需要注冊監(jiān)聽,讓服務(wù)端通知的,但是服務(wù)端也必須提供解注冊的方法,不然客戶端如果離開某個界面不想再接受消息了,雖然直接離開不做處理客戶端這邊不會出錯,但是服務(wù)端那邊的監(jiān)聽集合還存在之前的,那么就會浪費系統(tǒng)資源,所以有注冊監(jiān)聽的時候,最好也要實現(xiàn)解注冊的方法
《Android開發(fā)藝術(shù)探索》
android新創(chuàng)建Activity是需要在Manifest文件中進(jìn)行注冊的。
注冊步驟如下:
一、新建一個類(*.class),繼承自android.app.Activity類。
二、在res/layout目錄下新建一個布局xml文件,文件名隨意(只能包含小寫字母數(shù)字或下劃線),用來設(shè)置新Activity的布局(對于如何設(shè)置Activity的布局,可參考本站相關(guān)內(nèi)容)。
三、打開AndroidManifest.xml文件,在里面進(jìn)行一下新Activity的注冊。
方法是雙擊AndroidManifest.xml這個文件,在eclipse的編輯區(qū)下面會出現(xiàn)這樣的選項:
選擇Application這個選項,將編輯區(qū)的滾動條拖到最下面,找到:
當(dāng)前里面有的Activity是主Activity,我們點add按鈕,選擇Activity,這時你會發(fā)現(xiàn)上面的Application Nodes中多了一個Activity,點一下左面的新的Activity,確保它被選中,之后點擊在右側(cè)的Attributes for Activity中的Name項,在彈出的對話框中輸入新Activity的名字(就是你第一步新建的類的類名),輸入名字時它有自動查找功能,之后點擊保存,新的Activity就被注冊了,我們也可以從AndroidManifest.xml的代碼中看到新注冊的Activity(當(dāng)然你也可以直接加代碼)。
之后去你第一步建的那個類中為新Activity添加OnCreate方法,在類中加上:
這樣一個Activity就被創(chuàng)建好了。
Manifest是什么?
manifest是一種軟件,屬于AndroidManifest.xml文件,在簡單的Android系統(tǒng)的應(yīng)用中提出了重要的信息,它可以運行任何應(yīng)用程序的代碼。
首先寫一個類要繼承BroadcastReceiver\x0d\x0a第一種:在清單文件中聲明,添加\x0d\x0a\x0d\x0a \x0d\x0a \x0d\x0a\x0d\x0a第二種使用代碼進(jìn)行注冊如:\x0d\x0aIntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");\x0d\x0aIncomingSMSReceiver receiver = new IncomgSMSReceiver();\x0d\x0aregisterReceiver(receiver.filter);