實(shí)現(xiàn)一個(gè)binder通信實(shí)例,需要經(jīng)過以下步驟: (一)獲得ServiceManager的對(duì)象引用 (二)向ServiceManager注冊(cè)新的Service (三)在Client中通過ServiceManager獲得Service對(duì)象引用 (三)在Client中發(fā)送請(qǐng)求,由Service返回結(jié)果。 下面看具體的代碼如何實(shí)現(xiàn)。 三.一 libmyservice代碼實(shí)現(xiàn) (一)新建目錄frameworks/base/myservice/libservice,進(jìn)入該目錄 view plain $ cd frameworks/base $ mkdir myservice $ cd myservice $ mkdir libmyservice $ cd libmyservice (二)編寫libmyservice/myservic.h文件 view plain #include threads.h #include RefBase.h #include IInterface.h #include BpBinder.h #include Parcel.h namespace android { class MyService : public BBinder { mutable Mutex mLock; int三二_t mNextConnId; public: static int instantiate(); MyService(); virtual ~MyService(); virtual status_t onTransact(uint三二_t, const Parcel, Parcel*, uint三二_t); }; }; //namespace (二)編寫libservice/myservice.cpp文件 view plain #include "myservice.h" #include IServiceManager.h #include IPCThreadState.h namespace android { static struct sigaction oldact; static pthread_key_t sigbuskey; int MyService::instantiate() { LOGE("MyService instantiate"); // defaultServiceManager ()獲得ServiceManager的對(duì)象引用,addService()可向ServiceManager注冊(cè)新的服務(wù) int r = defaultServiceManager()-addService(String一陸("android.myservice"), new MyService()); LOGE("MyService r = %d/n", r); return r; } MyService::MyService() { LOGV("MyService created"); mNextConnId = 一; pthread_key_create(sigbuskey, NULL); } MyService::~MyService() { pthread_key_delete(sigbuskey); LOGV("MyService destroyed"); } // 每個(gè)系統(tǒng)服務(wù)都繼承自BBinder類,都應(yīng)重寫B(tài)Binder的onTransact虛函數(shù)。當(dāng)用戶發(fā)送請(qǐng)求到達(dá)Service時(shí),系統(tǒng)框架會(huì)調(diào)用Service的onTransact函數(shù),該函數(shù)分析接收到的數(shù)據(jù)包,調(diào)用相應(yīng)的接口函數(shù)處理請(qǐng)求 status_t MyService::onTransact(uint三二_t code, const Parcel data, Parcel* reply, uint三二_t flags) { switch(code) { case 0: { pid_t pid = data.readInt三二(); int num = data.readInt三二(); num = num + 一00; reply-writeInt三二(num); return NO_ERROR; } break; default: return BBinder::onTransact(code, data, reply, flags); } } }; //namespace (三)編寫libservice/Android.mk文件 view plain # File: Android.mk LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES := myservice.cpp LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) LOCAL_SHARED_LIBRARIES := libutils libbinder LOCAL_MODULE_TAGS := optional LOCAL_PRELINK_MODULE := false LOCAL_MODULE := libmyservice include $(BUILD_SHARED_LIBRARY) (四)編譯libmyservice.so動(dòng)態(tài)庫(kù) 在android源碼主目錄下 view plain $ source build/envsetup.sh including device/htc/passion/vendorsetup.sh including device/samsung/crespo四g/vendorsetup.sh including device/samsung/crespo/vendorsetup.sh $ mmm frameworks/base/myservice/libmyservice/ 編譯成功后生成文件:out/target/product/generic/system/lib/libmyservice.s

創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的泗洪網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
接口(python 中的協(xié)議)的多種不同的實(shí)現(xiàn)方式即為多態(tài)。多態(tài)的作用,就是為了類在繼承和派生的時(shí)候,保證使用“家譜”中任一類的實(shí)例的某一屬性時(shí)的正確調(diào)用。
可以看到,在上面的代碼中,只要實(shí)現(xiàn)了 Dock 類中的 swimming 和 Walk 方法,那么這個(gè)類就可以被叫做 Dock 類
應(yīng)用場(chǎng)景 如: for 循環(huán), 在python 中 for 循環(huán)只能用于可迭代對(duì)象, 那么, 我自己定義的類實(shí)現(xiàn)了 __iter__協(xié)議(接口),這個(gè)實(shí)例類就是一個(gè)可迭代對(duì)象,可以被for 循環(huán)使用
python 中定義協(xié)議類協(xié)議使用 @abstractmethod 裝飾器,@abstractmethod 裝飾過的類是不能進(jìn)行初始化的,相對(duì)于c++中的純虛函數(shù)類
這個(gè)類只能當(dāng)做協(xié)議(接口)類
在進(jìn)行新紀(jì)元時(shí)間(1970-01-01 00:00:00)以來(lái)的秒到實(shí)際時(shí)間之間轉(zhuǎn)換的時(shí)候 MySQL 根據(jù)參數(shù) time_zone 的設(shè)置有兩種選擇:
time_zone?設(shè)置為 SYSTEM 的話:使用 sys_time_zone 獲取的 OS 會(huì)話時(shí)區(qū),同時(shí)使用 OS API 進(jìn)行轉(zhuǎn)換。對(duì)應(yīng)轉(zhuǎn)換函數(shù) Time_zone_system::gmt_sec_to_TIME
time_zone?設(shè)置為實(shí)際的時(shí)區(qū)的話:比如 ‘+08:00’,那么使用使用 MySQL 自己的方法進(jìn)行轉(zhuǎn)換。對(duì)應(yīng)轉(zhuǎn)換函數(shù) Time_zone_offset::gmt_sec_to_TIME
實(shí)際上 Time_zone_system 和 Time_zone_offset 均繼承于 Time_zone 類,并且實(shí)現(xiàn)了 Time_zone 類的虛函數(shù)進(jìn)行了重寫,因此上層調(diào)用都是 Time_zone::gmt_sec_to_TIME。
分享文章:虛函數(shù)python,虛函數(shù)和純虛函數(shù)
瀏覽地址:http://chinadenli.net/article9/dsioioh.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)、域名注冊(cè)、ChatGPT、網(wǎng)站設(shè)計(jì)、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容