日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

【Android个人理解(八)】跨应用调用不同组件的方法

發布時間:2025/3/20 Android 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Android个人理解(八)】跨应用调用不同组件的方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如果情景:

創建兩個應用appA和appB,appA包括一個Service,此Service有一個堵塞方法每隔10秒鐘產生一個隨機數字,例如以下: public int getRandomInt(){Thread.sleep(10000);return someRandomInt; }

appB調用appA中Service.getRandomInt()的方法,將數字顯示在界面上.

解決方式:

我們都知道。從層次上,大體能夠分進程,任務,組件。線程。Android系統使得開發人員對于任務、組件界限相對清晰,而對于進程具有進程托管的說法,而對于線程就全然是開發人員自己的問題,Android系統沒有做太多的約束。

因為題目相對簡單,組件僅僅有一個appB的Activity和一個appA的Service,因此我們的層次關系為:

進程??????? 線程?? ?????組件??

1、若兩個組件在同一進程中:

通過設置<process>屬性,將相關應用,塞進一個進程,使得它們能夠同生共死,擁有共同的內存區域。

由于問題要求每隔10秒進行一次通信,屬密集操作。這樣能夠節省開支。

自己定義接口:

1)???????自己定義一個接口。該接口中有一個得到隨機數的空方法。

2)???????Server端用一個類繼承自Binder并實現該接口。覆寫了得到隨機數的空方法。

3)???????Client端通過ServiceConnection獲取到該類的對象。從而可以使用該獲取當前下載進度的方法,終于實現實時交互。

4)???????Server端重寫onBind()方法,返回binder對象。

5)???????Activity中重寫onServiceConnected獲得Service對象。

6)???????開一個后臺線程。用Service對象調用getRandomInt()。

7)???????通過Handler將數據返回給主線程,更新View。

(另開一個后臺線程的原因是getRandomInt()里的方法sleep(10000)會使main線程休眠。造成界面卡頓。

事實上這樣使Service組件浪費。最好的方式是啟動Service。然后再進行通信)

2、若兩個組件不在同一進程中:

?????? 設置<process>屬性,劃分到不同的進程

?????? RPC即Remote Procedure Call遠程進程調用。而Android的進程間的通信是通過AIDL服務實現。以Binder為基礎的IPC是RPC的一部分。

1)???????在Eclipseproject的package文件夾中建立一個擴展名為aidl的文件。aidl文件里定義的是AIDL服務的接口。即面向接口的編程。同上含有getRandomInt()的空方法。

2)???????建立一個服務類(Service的子類)。

實現由aidl文件生成的getRandomInt()。

3)???????在AndroidManifest.xml文件里配置AIDL服務。即在Service中intent-filter標簽下聲明。

4)???????在appB的Activity內開一個后臺線程,線程內創建ServiceConnection對象??,獲得AIDL服務對象?,調用getRandomInt()方法。

5)???????通過Handler將數據返回給主線程,更新View。

(與單進程類似)

?

假設單純實現組件之間的通信,而不是調用另個組件的方法,能夠有很多其它方式:

在同一進程中:

1)在appA的manifest文件里設置Service的Android:exported="true"。

2)appB的Activity設置監聽事件,通過startService()發送intent的方式調用啟動appA的Service。

然后通過Handler、SharedPreferences等方式線程間傳遞數據。

而在不同一進程中:

能夠使用Boradcast。ContentProvider。Mssenger(信使)交互方式進行跨進程的數據傳遞。


總結

以上是生活随笔為你收集整理的【Android个人理解(八)】跨应用调用不同组件的方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。