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

歡迎訪問 生活随笔!

生活随笔

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

Android

Android Service(7)--完结篇

發布時間:2025/3/20 Android 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android Service(7)--完结篇 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

傻蛋在Android Service(4) 中講述了使用AIDL語言,來讓ADT幫助我們自動生成一個Stub類(Binder的子類),來實現不同進程中Service的調用。通過研究ADT自動生成的代碼可以發現,這段代碼其實是幫我們實現了一個代理類,這個代理能夠通過進行不同進程間的通信。我們Activity調用這個代理類,而這個調用遠程Service中的方法。從而實現了遠程通信。

今天傻蛋自己寫了一個底層遠程通信的代理類(具體通信方式傻蛋在第6篇中已經講了),同樣實現了遠程調用Service的效果。基本結構和ADT自動生成的代碼相似,但是清晰了很多,使用方法和第四篇中的使用一某一樣,十分通用。

?

?[Copy to clipboard]Download IMyMusicService.java
  • /** ?
  • ?*?IMusicService.java ?
  • ?*?com.androidtest.service.mediaplayer ?
  • ?* ?
  • ?*?Function:?TODO ?
  • ?* ?
  • ?*???ver?????date???????????author ?
  • ?*?────────────────────────────────── ?
  • ?*???????????2011-6-22??????Leon ?
  • ?* ?
  • ?*?Copyright?(c)?2011,?TNT?All?Rights?Reserved. ?
  • ?*/ ?
  • ? ?
  • package?com.androidtest.service.remoteplayer; ?
  • ? ?
  • import?android.os.Binder; ?
  • import?android.os.IBinder; ?
  • import?android.os.Parcel; ?
  • import?android.os.RemoteException; ?
  • import?android.util.Log; ?
  • ? ?
  • /** ?
  • ?*?ClassName:IMusicService?Function:?TODO?ADD?FUNCTION?Reason:?TODO?ADD?REASON ?
  • ?* ?
  • ?*?@author?Leon ?
  • ?*?@version ?
  • ?*?@since?Ver?1.1 ?
  • ?*?@Date?2011-6-22 ?
  • ?*/ ?
  • public?interface?IMyMusicService?{ ?
  • ? ?
  • ????static?final?String?TAG?=?IMyMusicService.class.getSimpleName(); ?
  • ????static?final?int?TRANSACTION_PLAY?=?android.os.IBinder.FIRST_CALL_TRANSACTION?+?0; ?
  • ????static?final?int?TRANSACTION_PAUSE?=?android.os.IBinder.FIRST_CALL_TRANSACTION?+?1; ?
  • ????static?final?int?TRANSACTION_STOP?=?android.os.IBinder.FIRST_CALL_TRANSACTION?+?2; ?
  • ? ?
  • ????public?void?play()?throws?RemoteException?; ?
  • ? ?
  • ????public?void?pause()throws?RemoteException?; ?
  • ? ?
  • ????public?void?stop()?throws?RemoteException?; ?
  • ? ?
  • ????public?static?abstract?class?Stub?extends?Binder?implements?IMyMusicService?{ ?
  • ????????//用于Service的接收 ?
  • ????????@Override ?
  • ????????protected?boolean?onTransact(int?code,?Parcel?data,?Parcel?reply, ?
  • ????????????????int?flags)?throws?RemoteException?{ ?
  • ? ?
  • ????????????//?TODO?Auto-generated?method?stub ?
  • ????????????switch?(code)?{ ?
  • ????????????case?TRANSACTION_PLAY: ?
  • ????????????????this.play(); ?
  • ????????????????/** ?
  • ?????????????????*?注意?readString?是這樣解釋 ?
  • ?????????????????*?Read?a?string?value?from?the?parcel?at?the?current?dataPosition(). ?
  • ?????????????????*?第二次讀的話data?position就會前移,此處就為null了 ?
  • ?????????????????*/ ?
  • ????????????????String?temp?=?data.readString(); ?
  • ????????????????Log.v(TAG,"The?Message?From??Clinet?:?"+temp); ?
  • ????????????????reply.writeString(temp); ?
  • ????????????????return?true; ?
  • ????????????case?TRANSACTION_PAUSE: ?
  • ????????????????this.pause(); ?
  • ????????????????Log.v(TAG,"The?Message?From??Clinet?:?"+data.readString()); ?
  • ????????????????reply.writeString(data.readString()); ?
  • ????????????????return?true; ?
  • ????????????case?TRANSACTION_STOP: ?
  • ????????????????this.stop(); ?
  • ????????????????Log.v(TAG,"The?Message?From??Clinet?:"+data.readString()); ?
  • ????????????????reply.writeString(data.readString()); ?
  • ????????????????return?true; ?
  • ????????????} ?
  • ????????????return?super.onTransact(code,?data,?reply,?flags); ?
  • ? ?
  • ????????} ?
  • ????????//模板模式 ?
  • ????????public?abstract?void?play()?throws?RemoteException?; ?
  • ? ?
  • ????????public?abstract?void?pause()?throws?RemoteException?; ?
  • ? ?
  • ????????public?abstract?void?stop()?throws?RemoteException?; ?
  • ? ?
  • ????????//其實就是獲取代理類,供Activity來調用 ?
  • ????????public?static?IMyMusicService?asInterface(IBinder?iBinder){ ?
  • ????????????return?new?Proxy(iBinder); ?
  • ????????} ?
  • ? ?
  • ????????//Activity其實就是通過此代理和遠程的Stub進行通信 ?
  • ????????private?static?class?Proxy?implements?IMyMusicService{ ?
  • ????????????private?IBinder?iBinder; ?
  • ????????????public??Proxy(IBinder?iBinder)?{ ?
  • ????????????????this.iBinder?=iBinder; ?
  • ????????????} ?
  • ? ?
  • ????????????@Override ?
  • ????????????public?void?pause()?{ ?
  • ????????????????Parcel?sendData?=?Parcel.obtain(); ?
  • ????????????????Parcel?replyData?=Parcel.obtain(); ?
  • ????????????????sendData.writeString("pause"); ?
  • ????????????????try?{ ?
  • ????????????????????iBinder.transact(TRANSACTION_PAUSE,?sendData,?replyData,?0); ?
  • ????????????????????Log.v(TAG,?"The?Message?From?Service?"?+?replyData.readString()?); ?
  • ????????????????}?catch?(RemoteException?e)?{ ?
  • ????????????????????//?TODO?Auto-generated?catch?block ?
  • ????????????????????e.printStackTrace(); ?
  • ????????????????} ?
  • ????????????????//?TODO?Auto-generated?method?stub ?
  • ????????????} ?
  • ? ?
  • ????????????@Override ?
  • ????????????public?void?play()?{ ?
  • ? ?
  • ????????????????//?TODO?Auto-generated?method?stub ?
  • ????????????????Parcel?sendData?=?Parcel.obtain(); ?
  • ????????????????Parcel?replyData?=Parcel.obtain(); ?
  • ????????????????sendData.writeString("play"); ?
  • ????????????????try?{ ?
  • ????????????????????iBinder.transact(TRANSACTION_PLAY,?sendData,?replyData,?0); ?
  • ????????????????????Log.v(TAG,?"The?Message?From?Service?"?+?replyData.readString()); ?
  • ????????????????}?catch?(RemoteException?e)?{ ?
  • ????????????????????//?TODO?Auto-generated?catch?block ?
  • ????????????????????e.printStackTrace(); ?
  • ????????????????} ?
  • ? ?
  • ????????????} ?
  • ? ?
  • ????????????@Override ?
  • ????????????public?void?stop()?{ ?
  • ? ?
  • ????????????????//?TODO?Auto-generated?method?stub ?
  • ????????????????Parcel?sendData?=?Parcel.obtain(); ?
  • ????????????????Parcel?replyData?=Parcel.obtain(); ?
  • ????????????????sendData.writeString("stop"); ?
  • ????????????????try?{ ?
  • ????????????????????iBinder.transact(TRANSACTION_STOP,?sendData,?replyData,?0); ?
  • ????????????????????Log.v(TAG,?"The?Message?From?Service?"?+?replyData.readString()?); ?
  • ????????????????}?catch?(RemoteException?e)?{ ?
  • ????????????????????//?TODO?Auto-generated?catch?block ?
  • ????????????????????e.printStackTrace(); ?
  • ????????????????} ?
  • ? ?
  • ????????????} ?
  • ? ?
  • ????????} ?
  • ? ?
  • ????} ?
  • }?
  • ?[Copy to clipboard]Download MyCustomRemoteBinder.java
  • /** ?
  • ?*?MyRemoteBinder.java ?
  • ?*?com.androidtest.service.remoteplayer ?
  • ?* ?
  • ?*?Function:?TODO ?
  • ?* ?
  • ?*???ver?????date???????????author ?
  • ?*?────────────────────────────────── ?
  • ?*???????????2011-6-22??????Leon ?
  • ?* ?
  • ?*?Copyright?(c)?2011,?TNT?All?Rights?Reserved. ?
  • */ ?
  • ? ?
  • package?com.androidtest.service.remoteplayer; ?
  • ? ?
  • import?android.media.MediaPlayer; ?
  • import?android.os.RemoteException; ?
  • ? ?
  • import?com.androidtest.service.mediaplayer.MyMediaController; ?
  • ? ?
  • /** ?
  • ?*?ClassName:MyRemoteBinder ?
  • ?*?Function:?TODO?ADD?FUNCTION ?
  • ?*?Reason:???TODO?ADD?REASON ?
  • ?* ?
  • ?*?@author???Leon ?
  • ?*?@version ?
  • ?*?@since????Ver?1.1 ?
  • ?*?@Date?????2011-6-22 ?
  • ?*/ ?
  • public?class?MyCustomRemoteBinder?extends?IMyMusicService.Stub{ ?
  • ? ?
  • ????public??MyCustomRemoteBinder(MediaPlayer?mediaPlayer){ ?
  • ????????MyMediaController.mediaPlayer=mediaPlayer?; ?
  • ????}; ?
  • ????@Override ?
  • ????public?void?play()?throws?RemoteException?{ ?
  • ? ?
  • ????????//?TODO?Auto-generated?method?stub ?
  • ????????MyMediaController.play.execute(); ?
  • ? ?
  • ????} ?
  • ? ?
  • ????@Override ?
  • ????public?void?pause()?throws?RemoteException?{ ?
  • ? ?
  • ????????//?TODO?Auto-generated?method?stub ?
  • ????????MyMediaController.pause.execute(); ?
  • ? ?
  • ????} ?
  • ? ?
  • ????@Override ?
  • ????public?void?stop()?throws?RemoteException?{ ?
  • ? ?
  • ????????//?TODO?Auto-generated?method?stub ?
  • ????????MyMediaController.stop.execute(); ?
  • ? ?
  • ????};? ?
  • ? ?
  • }?
  • 本篇是Android Service的思考(7)的完結篇,Service用起來不難,但是理解其中的機制就有一定的難度了,尤其是遠程調用一定要對遠程代理有深刻的認識才行。本系列設計的源碼很多,如果有人需要請加最牛網的群找傻蛋索要。

    總結

    以上是生活随笔為你收集整理的Android Service(7)--完结篇的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 18禁肉肉无遮挡无码网站 | 高清视频在线播放 | 最新自拍偷拍 | 少妇在线观看 | 国产精品4| 日韩欧美高清视频 | 中文精品久久 | 少妇熟女视频一区二区三区 | 婷婷国产视频 | 在线观看免费国产视频 | 在线免费观看黄色片 | 岳乳丰满一区二区三区 | 777精品伊人久久久久大香线蕉 | 国产日韩欧美一区 | 欧美一区二区三区大屁股撅起来 | av免费网站观看 | 韩国三级视频在线观看 | 高h大肚孕期孕妇play | 精品久久不卡 | 天天av综合 | xxx69美国 | 久热精品在线观看 | 人妻激情偷乱频一区二区三区 | 无码人妻精品一区二区蜜桃网站 | 日本丰满大乳奶做爰 | 亚洲爆乳无码精品aaa片蜜桃 | 日本性视频网站 | 国产美女作爱全过程免费视频 | 在线播放一区 | 国产一二三区免费视频 | 中国18videosex极品 | 日韩精品卡通动漫网站 | 波多野结衣在线网址 | 亚洲精品福利 | 黄色大片免费观看 | 在线免费观看a级片 | 日本午夜免费福利视频 | 让男按摩师摸好爽视频 | 国产一区二区三区高清 | 国产五月天婷婷 | 综合久久国产 | 久久久久青草 | 91精品国产色综合久久不8 | 婷婷玖玖 | 国模福利视频 | 99久久久久无码国产精品 | 色悠悠久久综合 | 捆绑调教视频网站 | 欧美成人精品一区二区 | 99人妻碰碰碰久久久久禁片 | 日产国产亚洲精品系列 | 欧美国产日韩在线视频 | 欧美日韩黄色一级片 | 精品国产九九 | 激情中文网 | 日韩女优网站 | 日韩永久免费视频 | 公侵犯一区二区三区四区中文字幕 | 国产一级免费 | 一本一道av | 日韩视频在线观看一区 | 日韩精品一二三四 | 淫久久 | 日本高清视频www夜色资源 | 黄片毛片在线免费观看 | 天天综合网久久 | 97人妻人人揉人人躁人人 | 蜜桃精品噜噜噜成人av | 欧美日日夜夜 | 中文字幕在线免费看 | 久久精品国产一区二区三区 | 精品韩国一区二区三区 | 免费观看理伦片在线播放视频软件 | 99天堂网| 99伊人 | 综合久久久久 | 白丝av | 国产精品久久婷婷六月丁香 | 日韩图片区 | 少妇精品 | 成人视品 | 九九在线观看免费高清版 | 一区二区伊人 | 在线免费一区 | 国产精品热| 好吊视频一区二区 | 亚洲欧美网址 | 欧美熟妇7777一区二区 | 久草观看视频 | 18在线观看免费入口 | av在线浏览| 99国产视频在线 | 国产精品久久综合 | 一区二区三区四区在线 | 嫩草国产在线 | 国产精品区一区二区三 | 中文字幕精品一区久久久久 | 欧美性一区 | 麻豆黄色网址 |