- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
如何编写android service
Android的核心框架技術之1: 如何撰寫第一個核心服務
???
???
?? ? by 高煥堂
**高煥堂 的最新課程消息**
?
?
????????????核心服務通常在獨立的進程(Process)裡執行。
????????????必須提供IBinder介面,讓應用程式可以進行跨進程的綁定(Binding)和呼叫。
????????????因為共用,所以必須確保多線裎安全(Thread-safe)。
????????????以C++類別定義,誕生其物件,透過SM之協助,將該物件參考值傳給IServiceManager::addService()函數,就加入到Binder Driver裡了。
????????????應用程式可透過SM之協助而遠距綁定該核心服務,此時SM會回傳IBinder介面給應用程式。
????????????應用程式可透過IBinder::transact()函數來與核心服務互傳資料。
?
2.?入門級範例:將AddService核心服務加入Binder Driver
此範例功能為簡單的整數加法(Add)運算,此核心服務命名為AddService。
Step-1:以C++撰寫AddService類別,其完整程式碼為:
?
/*--- AddService.h定義檔?---*/
//AddService.h
#ifndef ANDROID_GUILH_ADD_SERVICE_H
#define ANDROID_GUILH_ADD_SERVICE_H
#include utils.h
#include utils/RefBase.h
#include utils/IInterface.h
#include utils/Parcel.h
?
namespace android {
class AddService : public BBinder{
?????mutable?????Mutex?????mLock;
?????????????????int32_t???mNextConnId;
?public:
?????static??int instantiate();
AddService();
?????virtual ~AddService();
?????virtual status_t onTransact(
?????????????uint32_t, const Parcel, Parcel*, uint32_t);
}}; //namespace
#endif
?
/*--- AddService.cpp實作檔?---*/
// AddService.cpp
#include AddService.h
#include utils/IServiceManager.h
#include utils/IPCThreadState.h
?
namespace android {
static struct sigaction oldact;
static pthread_key_t sigbuskey;
?
int AddService::instantiate() {
???????????????LOGE(AddService instantiate);
??????int r = defaultServiceManager()-addService(
???????????????????String16(guilh.add), new AddService());
???????????????LOGE(AddService r = %d\n, r);
return r;
}
?
AddService::AddService()
???{??LOGV(AddService created);
??????mNextConnId = 1;
??????pthread_key_create(sigbuskey, NULL);
???}
?
AddService::~AddService()
???{??pthread_key_delete(sigbuskey);
????????LOGV(AddService destroyed);
???}
?
status_t AddService::onTransact(
????????uint32_t code, const Parcel data, Parcel* reply, uint32_t flags){
????????switch(code) {
???????????case 0: {
??????????????pid_t pid = data.readInt32();
??????????????int num = data.
您可能关注的文档
- 基于顺应论的大学英语测试改革研究.doc
- 基于纽介堡方程的专色油墨调配.pdf
- 基因工程药物新发展.doc
- 基于虚拟仪器的钢轨磨耗检测系统设计.doc
- 基因工程及基应用-文.ppt
- 基层板材。吊顶板材.doc
- 基层管理艺术.doc
- 基层通讯员应具备的几种素质.doc
- 基本原则和依据.doc
- 基本欣赏.doc
- 中国行业标准 GM/T 0126-2023HTML密码应用置标语法.pdf
- 《JJF 2121-2024恒转速源校准规范》.pdf
- 餐饮服务中20条处理要点.docx
- 《GM/T 0011-2023可信计算 可信密码支撑平台功能与接口规范》.pdf
- 《JJF 2134-2024旋转流变仪校准规范》.pdf
- JJF 2121-2024恒转速源校准规范.pdf
- 计量规程规范 JJF 2121-2024恒转速源校准规范.pdf
- 《JJF 2118-2024压力式六氟化硫气体密度控制器校验仪校准规范》.pdf
- JJF 2134-2024旋转流变仪校准规范.pdf
- 计量规程规范 JJF 2134-2024旋转流变仪校准规范.pdf
文档评论(0)