freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

第7章后臺(tái)服務(wù)-資料下載頁

2025-07-20 12:32本頁面
  

【正文】 s。 32. } 遠(yuǎn)程服務(wù) ? 服務(wù)創(chuàng)建與調(diào)用 33. public boolean onTransact(int code, data, reply, int flags) throws { 34. switch (code) { 35. case INTERFACE_TRANSACTION: 36. { 37. (DESCRIPTOR)。 38. return true。 39. } 40. case TRANSACTION_Add: 41. { 42. (DESCRIPTOR)。 43. long _arg0。 44. _arg0 = ()。 45. long _arg1。 46. _arg1 = ()。 47. long _result = (_arg0, _arg1)。 48. ()。 49. (_result)。 50. return true。 遠(yuǎn)程服務(wù) ? 服務(wù)創(chuàng)建與調(diào)用 51. } 52. } 53. return (code, data, reply, flags)。 54. } 55. private static class Proxy implements { 56. private mRemote。 57. Proxy( remote){ 58. mRemote = remote。 59. } 60. public asBinder(){ 61. return mRemote。 62. } 63. public getInterfaceDescriptor(){ 64. return DESCRIPTOR。 65. } 66. public long Add(long a, long b) throws { 67. _data = ()。 68. _reply = ()。 69. long _result。 遠(yuǎn)程服務(wù) ? 服務(wù)創(chuàng)建與調(diào)用 70. try { 71. (DESCRIPTOR)。 72. (a)。 73. (b)。 74. (, _data, _reply, 0)。 75. ()。 76. _result = ()。 77. } 78. finally { 79. ()。 80. ()。 81. } 82. return _result。 83. } 84. } 85. static final int TRANSACTION_Add = ( + 0)。 86. } 87. public long Add(long a, long b) throws 。 88. } 遠(yuǎn)程服務(wù) ? 服務(wù)創(chuàng)建與調(diào)用 ? 第 8行 代碼是 IMathService繼承了 ,這是所有使用 AIDL建立的接口都必須繼承的基類接口,這個(gè)基類接口中定義了 asBinder()方法,用來獲取 Binder對(duì)象 ? 在代碼的第 30行到第 32行,實(shí)現(xiàn)了 接口所定義的 asBinder()方法 ? 在 IMathService中,絕大多數(shù)的代碼是用來實(shí)現(xiàn) Stub這個(gè)抽象類的。每個(gè)遠(yuǎn)程接口都包 Stub類,因?yàn)槭莾?nèi)部類,所有并不會(huì)產(chǎn)生命名的沖突 ? asInterface(IBinder)是 Stub內(nèi)部的跨進(jìn)程服務(wù)接口,調(diào)用者可以通過該方法獲取到跨進(jìn)程服務(wù)的對(duì)象 遠(yuǎn)程服務(wù) ? 服務(wù)創(chuàng)建與調(diào)用 ? 仔細(xì)觀察 asInterface(IBinder)實(shí)現(xiàn)方法,首先判斷 IBinder對(duì)象 obj是否為 null(第 21行),如果是則立即返回 ? 第 24行 代碼是 使用 DESCRIPTOR構(gòu)造,并判斷 對(duì)象是否為進(jìn)程內(nèi)服務(wù) ? 如果是進(jìn)程內(nèi)服務(wù),則無需進(jìn)程間通信,返回(第 26行) ? 如果不是進(jìn)程內(nèi)服務(wù),則構(gòu)造并返回 Proxy對(duì)象(第 28行) ? 第 66行 代碼是 Proxy內(nèi)部包含與 名的函數(shù) ? 第 71~ 76行 代碼是 在該函數(shù)中以一定的順序?qū)⑺袇?shù)寫入 Parcel對(duì)象,以供 Stub內(nèi)部的 onTransact()方法能夠正確獲取到參數(shù) 遠(yuǎn)程服務(wù) ? 服務(wù)創(chuàng)建與調(diào)用 ? 當(dāng)數(shù)據(jù)以 Parcel對(duì)象的形式傳遞到跨進(jìn)程服務(wù)的內(nèi)部時(shí),onTransact()方法(第 33行)將從 Parcel對(duì)象中逐一的讀取每個(gè)參數(shù),然后調(diào)用 Service內(nèi)部制定的方法,并再將結(jié)果寫入另一個(gè) Parcel對(duì)象,準(zhǔn)備將這個(gè) Parcel對(duì)象返回給遠(yuǎn)程的調(diào)用者 ? Parcel是 Android系統(tǒng)中應(yīng)用程序進(jìn)程間數(shù)據(jù)傳遞的容器,能夠在兩個(gè)進(jìn)程中完成數(shù)據(jù)的打包和拆包的工作,但Parcel不同于通用意義上的序列化, Parcel的設(shè)計(jì)目的是用于高性能 IPC傳輸,因此不能夠?qū)?Parcel對(duì)象保存在任何持久存儲(chǔ)設(shè)備上 遠(yuǎn)程服務(wù) ? 服務(wù)創(chuàng)建與調(diào)用 ? 通過繼承 Service類實(shí)現(xiàn)跨進(jìn)程服務(wù) ? 實(shí)現(xiàn)跨進(jìn)程服務(wù)需要建立一個(gè)繼承 類,并在該類中通過 onBind()方法返回 IBinder對(duì)象,調(diào)用者使用返回的 IBinder對(duì)象就 可以 訪問跨進(jìn)程服務(wù) ? IBinder對(duì)象的建立通過使用 Stub類實(shí)現(xiàn),并逐一實(shí)現(xiàn)在 義的函數(shù) 遠(yuǎn)程服務(wù) ? 服務(wù)創(chuàng)建與調(diào)用 ? 通過繼承 Service類實(shí)現(xiàn)跨進(jìn)程服務(wù) ? 在 RemoteMathServiceDemo示例中,跨進(jìn)程服務(wù)的實(shí)現(xiàn)類是 ? 下面是 1. package 。 2. 3. import 。 4. import 。 5. import 。 6. import 。 7. 8. public class MathService extends Service{ 9. private final mBinder = new () { 10. public long Add(long a, long b) { 11. return a + b。 遠(yuǎn)程服務(wù) ? 服務(wù)創(chuàng)建與調(diào)用 ? 通過繼承 Service類實(shí)現(xiàn)跨進(jìn)程服務(wù) 12. } 13. }。 14. @Override 15. public IBinder onBind(Intent intent) { 16. (this, 遠(yuǎn)程綁定: MathService, 17. ).show()。 18. return mBinder。 19. } 20. @Override 21. public boolean onUnbind (Intent intent){ 22. (this, 取消遠(yuǎn)程綁定: MathService, 23. ).show()。 24. return false。 25. } 26. } 遠(yuǎn)程服務(wù) ? 服務(wù)創(chuàng)建與調(diào)用 ? 通過繼承 Service類實(shí)現(xiàn)跨進(jìn)程服務(wù) ? 第 8行代碼表明 MathService繼承于 ? 第 9行 代碼 建立 mBinder ? 第 10行 代碼 實(shí)現(xiàn)了 AIDL文件定義的跨進(jìn)程服務(wù)接口 ? 第 18行 代碼 在 onBind()方法中,將 mBinder返回給遠(yuǎn)程調(diào)用者 ? 第 16行和第 22行 代碼 分別是在綁定和取消綁定時(shí),為用戶產(chǎn)生的提示信息 遠(yuǎn)程服務(wù) ? 服務(wù)創(chuàng)建與調(diào)用 ? 通過繼承 Service類實(shí)現(xiàn)跨進(jìn)程服務(wù) ? RemoteMathServiceDemo示例的文件結(jié)構(gòu)如圖 ? 示例中只有跨進(jìn)程服務(wù)的類文件文件 ,沒有任何用于啟動(dòng)時(shí)顯示用戶界面的 Activity文件 遠(yuǎn)程服務(wù) ? 服務(wù)創(chuàng)建與調(diào)用 ? 通過繼承 Service類實(shí)現(xiàn)跨進(jìn)程服務(wù) ? 在調(diào)試 RemoteMathServiceDemo示例時(shí),模擬器的屏幕上不會(huì)出現(xiàn)用戶界面,但在控制臺(tái)會(huì)有“沒有找到用于啟動(dòng)的 Activity,僅將應(yīng)用程序同步到設(shè)備上”的提示信息,這些信息表明 apk文件已經(jīng)上傳到模擬器中 ? 提示信息如圖 遠(yuǎn)程服務(wù) ? 服務(wù)創(chuàng)建與調(diào)用 ? 通過繼承 Service類實(shí)現(xiàn)跨進(jìn)程服務(wù) ? 使用 File Explorer查看模擬器的文件系統(tǒng) ,可以 進(jìn)一步確認(rèn)編譯好的 apk文件是否正確上傳到模擬器中 ? 如果能在 /data/app/下找到,說明提供跨進(jìn)程服務(wù)的 apk文件已經(jīng)正確上傳 ? 如果 RemoteMathServiceDemo示例無法在 Android模擬器的程序啟動(dòng)欄中找到,只能夠通過其他應(yīng)用程序調(diào)用該示例中的跨進(jìn)程服務(wù) 遠(yuǎn)程服務(wù) ? 服務(wù)創(chuàng)建與調(diào)用 ? 通過繼承 Service類實(shí)現(xiàn)跨進(jìn)程服務(wù) ? 下圖表示 的保存位置 遠(yuǎn)程服務(wù) ? 服務(wù)創(chuàng)建與調(diào)用 ? 通過繼承 Service類實(shí)現(xiàn)跨進(jìn)程服務(wù) ? RemoteMathServiceDemo是本書中第一個(gè)沒有 Activity的示例,在 ,在 application標(biāo)簽下只有一個(gè) service標(biāo)簽 ? 1. ?xml version= encoding=utf8? 2. manifest xmlns:android= 3. package= 4. android:versionCode=1 5. android:versionName= 遠(yuǎn)程服務(wù) ? 服務(wù)創(chuàng)建與調(diào)用 ? 注意第 10行代碼,程調(diào)用 MathService的標(biāo)識(shí),在調(diào)用者段使用()函數(shù)將標(biāo)識(shí)加入 Intent中,然后隱式啟動(dòng)或綁定服 務(wù) 6. application android:icon=@drawable/icon android:label= @string/app_name 7. service android:name=.MathService 8. android:process=:remote 9. intentfilter 10. action android:name= / 11. /intentfilter 12. /service 13. /application 14. usessdk android:minSdkVersion=3 / 15. /manifest 遠(yuǎn)程服務(wù) ? 服務(wù)創(chuàng)建與調(diào)用 ? 綁定和使用跨進(jìn)程服務(wù) ? 下圖是RemoteMathCallerDemo的界面 ? 用戶可以綁定跨進(jìn)程服務(wù),也可以取消服務(wù)綁定 ? 在綁定跨進(jìn)程服務(wù)后,可以調(diào)用 RemoteMathServiceDemo中的 MathService服務(wù)進(jìn)行加法運(yùn)算,運(yùn)算的輸入由RemoteMathCallerDemo隨機(jī)產(chǎn)生,運(yùn)算的輸入和結(jié)果顯示在屏幕的上方 遠(yuǎn)程服務(wù) ? 服務(wù)創(chuàng)建與調(diào)用 ? 綁定和使用跨進(jìn)程服務(wù) ? 應(yīng)用程序在調(diào)用跨進(jìn)程服務(wù)時(shí),應(yīng)用程序與跨進(jìn)程服務(wù)應(yīng)具有相同的 Proxy類和簽名函數(shù),這樣才能夠使數(shù)據(jù)在調(diào)用者處打包后,可以在遠(yuǎn)程訪問端正確拆包,反之亦然 ? 從實(shí)踐角度來講,調(diào)用者需要使用與跨進(jìn)程服務(wù)端相同的AIDL文件 ? 在 RemoteMathCallerDemo示例,在,引如與RemoteMathServiceDemo相同的 AIDL文件,同時(shí)在 /gen目錄下會(huì)自動(dòng)產(chǎn)生相同的 遠(yuǎn)程服務(wù) ? 服務(wù)創(chuàng)建與調(diào)用 ? 綁定和使用跨進(jìn)程服務(wù) ? 下圖是 RemoteMathServiceDemo的文件結(jié)構(gòu) 遠(yuǎn)程服務(wù) ? 服務(wù)創(chuàng)建與調(diào)用 ? 綁定和使用跨進(jìn)程服務(wù) ? Activity的文件,跨進(jìn)程服務(wù)的綁定和使用方法與 SimpleMathServiceDemo相似 ? 不同之處主要包括以下兩個(gè)方面 ? 第 1行 代碼 使用 IMathService聲明跨進(jìn)程服務(wù)對(duì)象 ? 第 6行代碼通過 asInterface()方法實(shí)現(xiàn)獲取服務(wù)對(duì)象
點(diǎn)擊復(fù)制文檔內(nèi)容
黨政相關(guān)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1