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

正文內容

第7章后臺服務-資料下載頁

2025-07-20 12:32本頁面
  

【正文】 s。 32. } 遠程服務 ? 服務創(chuàng)建與調用 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。 遠程服務 ? 服務創(chuàng)建與調用 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。 遠程服務 ? 服務創(chuàng)建與調用 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. } 遠程服務 ? 服務創(chuàng)建與調用 ? 第 8行 代碼是 IMathService繼承了 ,這是所有使用 AIDL建立的接口都必須繼承的基類接口,這個基類接口中定義了 asBinder()方法,用來獲取 Binder對象 ? 在代碼的第 30行到第 32行,實現(xiàn)了 接口所定義的 asBinder()方法 ? 在 IMathService中,絕大多數(shù)的代碼是用來實現(xiàn) Stub這個抽象類的。每個遠程接口都包 Stub類,因為是內部類,所有并不會產生命名的沖突 ? asInterface(IBinder)是 Stub內部的跨進程服務接口,調用者可以通過該方法獲取到跨進程服務的對象 遠程服務 ? 服務創(chuàng)建與調用 ? 仔細觀察 asInterface(IBinder)實現(xiàn)方法,首先判斷 IBinder對象 obj是否為 null(第 21行),如果是則立即返回 ? 第 24行 代碼是 使用 DESCRIPTOR構造,并判斷 對象是否為進程內服務 ? 如果是進程內服務,則無需進程間通信,返回(第 26行) ? 如果不是進程內服務,則構造并返回 Proxy對象(第 28行) ? 第 66行 代碼是 Proxy內部包含與 名的函數(shù) ? 第 71~ 76行 代碼是 在該函數(shù)中以一定的順序將所有參數(shù)寫入 Parcel對象,以供 Stub內部的 onTransact()方法能夠正確獲取到參數(shù) 遠程服務 ? 服務創(chuàng)建與調用 ? 當數(shù)據(jù)以 Parcel對象的形式傳遞到跨進程服務的內部時,onTransact()方法(第 33行)將從 Parcel對象中逐一的讀取每個參數(shù),然后調用 Service內部制定的方法,并再將結果寫入另一個 Parcel對象,準備將這個 Parcel對象返回給遠程的調用者 ? Parcel是 Android系統(tǒng)中應用程序進程間數(shù)據(jù)傳遞的容器,能夠在兩個進程中完成數(shù)據(jù)的打包和拆包的工作,但Parcel不同于通用意義上的序列化, Parcel的設計目的是用于高性能 IPC傳輸,因此不能夠將 Parcel對象保存在任何持久存儲設備上 遠程服務 ? 服務創(chuàng)建與調用 ? 通過繼承 Service類實現(xiàn)跨進程服務 ? 實現(xiàn)跨進程服務需要建立一個繼承 類,并在該類中通過 onBind()方法返回 IBinder對象,調用者使用返回的 IBinder對象就 可以 訪問跨進程服務 ? IBinder對象的建立通過使用 Stub類實現(xiàn),并逐一實現(xiàn)在 義的函數(shù) 遠程服務 ? 服務創(chuàng)建與調用 ? 通過繼承 Service類實現(xiàn)跨進程服務 ? 在 RemoteMathServiceDemo示例中,跨進程服務的實現(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。 遠程服務 ? 服務創(chuàng)建與調用 ? 通過繼承 Service類實現(xiàn)跨進程服務 12. } 13. }。 14. @Override 15. public IBinder onBind(Intent intent) { 16. (this, 遠程綁定: MathService, 17. ).show()。 18. return mBinder。 19. } 20. @Override 21. public boolean onUnbind (Intent intent){ 22. (this, 取消遠程綁定: MathService, 23. ).show()。 24. return false。 25. } 26. } 遠程服務 ? 服務創(chuàng)建與調用 ? 通過繼承 Service類實現(xiàn)跨進程服務 ? 第 8行代碼表明 MathService繼承于 ? 第 9行 代碼 建立 mBinder ? 第 10行 代碼 實現(xiàn)了 AIDL文件定義的跨進程服務接口 ? 第 18行 代碼 在 onBind()方法中,將 mBinder返回給遠程調用者 ? 第 16行和第 22行 代碼 分別是在綁定和取消綁定時,為用戶產生的提示信息 遠程服務 ? 服務創(chuàng)建與調用 ? 通過繼承 Service類實現(xiàn)跨進程服務 ? RemoteMathServiceDemo示例的文件結構如圖 ? 示例中只有跨進程服務的類文件文件 ,沒有任何用于啟動時顯示用戶界面的 Activity文件 遠程服務 ? 服務創(chuàng)建與調用 ? 通過繼承 Service類實現(xiàn)跨進程服務 ? 在調試 RemoteMathServiceDemo示例時,模擬器的屏幕上不會出現(xiàn)用戶界面,但在控制臺會有“沒有找到用于啟動的 Activity,僅將應用程序同步到設備上”的提示信息,這些信息表明 apk文件已經上傳到模擬器中 ? 提示信息如圖 遠程服務 ? 服務創(chuàng)建與調用 ? 通過繼承 Service類實現(xiàn)跨進程服務 ? 使用 File Explorer查看模擬器的文件系統(tǒng) ,可以 進一步確認編譯好的 apk文件是否正確上傳到模擬器中 ? 如果能在 /data/app/下找到,說明提供跨進程服務的 apk文件已經正確上傳 ? 如果 RemoteMathServiceDemo示例無法在 Android模擬器的程序啟動欄中找到,只能夠通過其他應用程序調用該示例中的跨進程服務 遠程服務 ? 服務創(chuàng)建與調用 ? 通過繼承 Service類實現(xiàn)跨進程服務 ? 下圖表示 的保存位置 遠程服務 ? 服務創(chuàng)建與調用 ? 通過繼承 Service類實現(xiàn)跨進程服務 ? RemoteMathServiceDemo是本書中第一個沒有 Activity的示例,在 ,在 application標簽下只有一個 service標簽 ? 1. ?xml version= encoding=utf8? 2. manifest xmlns:android= 3. package= 4. android:versionCode=1 5. android:versionName= 遠程服務 ? 服務創(chuàng)建與調用 ? 注意第 10行代碼,程調用 MathService的標識,在調用者段使用()函數(shù)將標識加入 Intent中,然后隱式啟動或綁定服 務 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 遠程服務 ? 服務創(chuàng)建與調用 ? 綁定和使用跨進程服務 ? 下圖是RemoteMathCallerDemo的界面 ? 用戶可以綁定跨進程服務,也可以取消服務綁定 ? 在綁定跨進程服務后,可以調用 RemoteMathServiceDemo中的 MathService服務進行加法運算,運算的輸入由RemoteMathCallerDemo隨機產生,運算的輸入和結果顯示在屏幕的上方 遠程服務 ? 服務創(chuàng)建與調用 ? 綁定和使用跨進程服務 ? 應用程序在調用跨進程服務時,應用程序與跨進程服務應具有相同的 Proxy類和簽名函數(shù),這樣才能夠使數(shù)據(jù)在調用者處打包后,可以在遠程訪問端正確拆包,反之亦然 ? 從實踐角度來講,調用者需要使用與跨進程服務端相同的AIDL文件 ? 在 RemoteMathCallerDemo示例,在,引如與RemoteMathServiceDemo相同的 AIDL文件,同時在 /gen目錄下會自動產生相同的 遠程服務 ? 服務創(chuàng)建與調用 ? 綁定和使用跨進程服務 ? 下圖是 RemoteMathServiceDemo的文件結構 遠程服務 ? 服務創(chuàng)建與調用 ? 綁定和使用跨進程服務 ? Activity的文件,跨進程服務的綁定和使用方法與 SimpleMathServiceDemo相似 ? 不同之處主要包括以下兩個方面 ? 第 1行 代碼 使用 IMathService聲明跨進程服務對象 ? 第 6行代碼通過 asInterface()方法實現(xiàn)獲取服務對象
點擊復制文檔內容
黨政相關相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1