Android的AMS如何呼叫Service::onBind()函?
2010-05-31 14:29:00 来源:WEB开发网AMS是ActivityManagerService之?费。?你?Activity呼叫bindService()?候,?弈而呼叫AMS::bindService()函?。此AMS::bindService()再呼叫AMS::requestServiceBindingLocked()函?。此AMS::requestServiceBindingLocked()再呼叫ActivityThread::scheduleBindService()函?。
ActivityThread::scheduleBindService()函?的?作包括:
*********************** *************************
依?Acivity呼叫bindService(??)?候的???容(如data.token),而?HashMap
Service s = mServices.get(data.token);
接著呼叫:
data.intent.setExtrasClassLoader(s.getClassLoader());
IBinder binder = s.onBind(data.intent);
?data的intent(?自Acivity呼叫bindService(??)的intent)?斤onBind(),
?行了onBind()函?,就回?myBinder物件了。
*********************** *************************
取得myBinder物件之後;接著,AMP.publishService(data.token, data.intent, binder);呼叫JNI Native函?:android_os_Parcel_writeStrongBinder()
?行其?的:parcel->writeStrongBinder( ibinderForJavaObject(env, object));
其中,ibinderForJavaObject()取得陪myBinder物件相?的JavaBBinderHolder物件。然後,env->IsInstanceOf(obj, gBinderOffsets.mClass)判?是不是myBinder的物件。此?是True! 於是,?行:env->GetIntField(obj, gBinderOffsets.mObject);就?myBinder::mObject?位取得JavaBBinderHolder物件?考。如下?:
接著,呼叫JavaBBinderHolder的get()函???建 javaBBinder物件:
此get()函?的?作:
---- ?行new JavaBBinder(env, mObject); ?昭生JavaBBinder 物件。
---- 此?,?入的mObject 是先前JavaBBinderHolder建立?所存入的
mObject值,它是myBinder物件?考。
---- mObject(env->NewGlobalRef(object)) 也?myBinder物件?考存入於
- ››Android 当修改一些代码时,使用什么编译命令可以最...
- ››Android 如何添加一个apk使模拟器和真机都编译进去...
- ››Android 修改Camera拍照的默认保存路径
- ››Android 如何修改默认输入法
- ››如何检查oracle的归档空间是否满了
- ››如何在浏览器中打开PDF文件并实现预览的思路与代码...
- ››如何改Win7系统我的文档保存位置
- ››android开发中finish()和System.exit(0)的区别
- ››Android手势识别简单封装类
- ››android中查看项目数字证书的两种方法
- ››Android中获取IMEI码的办法
- ››android 相机报错 setParameters failed
更多精彩
赞助商链接