d02_d_撰写你的第一个核心服务_ok_W_第1页
d02_d_撰写你的第一个核心服务_ok_W_第2页
d02_d_撰写你的第一个核心服务_ok_W_第3页
d02_d_撰写你的第一个核心服务_ok_W_第4页
d02_d_撰写你的第一个核心服务_ok_W_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、D02_d基於軟硬整合觀點撰写你的第一个核心服务(d)By 高煥堂 C层拥有控制点的必备表现是:1. 从C创建Java对象2. 从C调用Java层函数 步骤4.1: 此时,myActivity必须透过JNI Native函数去绑定核心服务,然后由JNI Native函数在Java层诞生一个BpBinder对象的分身:即BinderProxy对象。如下图: myActivity不宜含有native函数,于是委托sqr05来提供native函数,创建Java对象, 然后回传接口给myActivity。 在Android里,提供了一个JNI Native 模块, 内涵一个javaObjectForI

2、Binder()函数,它能协助诞生Java层的BinderProxy对象,做为BpBinder对象的分身。 撰写JNI Native模块/ sqr05.java/ public class sqr05static System.loadLibrary(SQRS05_jni); public native final IBinder bindCoreService();/* com_misoo_service_sqr05.cpp */.sp m_ib; JNIEXPORT jobject JNICALLJava_com_misoo_service_sqr05_bindCoreService(JN

3、IEnv *env, jobject thiz)LOGE(bindCoreService);sp sm = defaultServiceManager(); m_ib = sm-getService(String16(misoo.sqr); LOGE(SM:getService %pn,sm.get();if (m_ib = 0)LOGW(SQRService not published, waiting.);return 0;jobject jbi = javaObjectForIBinder(env, m_ib);if (jbi = 0)LOGE(javaObjectForIBinder

4、jbi = 0);return 0; return jbi; 由javaObjectForIBinder()诞生Java层的BinderProxy对象。 BinderProxy对象里的mObject属性指向BpBinder的IBinder接口。 JNI Native模块里的gBinderProxyOffsets.mObject公用属性存有BinderProxy类别里的mObject属性的ID 值(不是指针)。如下图: 于是,在从myActivity类别里,就能透过BinderProxy对象而调用JNI Native模块, 转而远距调用SQRService核心服务了。如下图: 撰写myActiv

5、ity/ myActivity.java/ndroid.os.IBinder;public class myActivity extends Activity implements OnClickListener private Button btn, btn2; Override/public void onClick(View v) switch(v.getId()case 101:sqr05 sqr = new sqr05();IBinder m_ib = sqr.bindCoreService(); int code = 0;Parcel data = Parcel.obtain();

6、 data.writeInt(11);Parcel reply = Parcel.obtain(); int flags = 0;try m_ib.transact(code, data, reply, flags); catch (Exception e) e.printStackTrace(); setTitle(Value = + String.valueOf(reply.readInt(); break;case 102:finish();break; myActivity执行到指令:sqr05 sqr = new sqr05();IBinder m_ib = sqr.bindCore

7、Service(); 就委托sqr05来调用Native的bindCoreService()函数:Java_com_misoo_service_sqr05_bindCoreService(JNIEnv*, jobject) 这bindCoreService()函数内含指令:sp sm = defaultServiceManager(); m_ib = sm-getService(String16(misoo.sqr); 于是,bindCoreService()函数绑定了SQRService核心服务。 再执行指令:jobjectjbi = javaObjectForIBinder(env, m_ib); 这bindCoreService()函数就诞生了Java层的BinderProxy对象。 最后执行到指令: return jbi; 这bindCoreService()函数就将BinderProxy对象的IBinder接口回传给myActivity类

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论