当前位置: 首页 > news >正文

烟台招远网站建设广东 网站备案

烟台招远网站建设,广东 网站备案,服务器安装WordPress没有权限访问,广州网站制作一般多少钱前言在[031]Binder线程栈复用中#xff0c;我们说到Binder驱动通过“线程栈复用”减少线程数#xff0c;我们来讲一讲另外一个机制“远程转本地”#xff0c;将远程Binder调用转化成本地方法调用。一、写个Demointerface IServiceB {void sendMsg(String msg); }1.1 Client… 前言在[031]Binder线程栈复用中我们说到Binder驱动通过“线程栈复用”减少线程数我们来讲一讲另外一个机制“远程转本地”将远程Binder调用转化成本地方法调用。一、写个Demointerface IServiceB {void sendMsg(String msg); } 1.1 Client端public class MainActivity extends AppCompatActivity {Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获得Service B的服务Intent intent new Intent(this, ServerB.class);this.bindService(intent, new ServiceConnection() {Overridepublic void onServiceConnected(ComponentName name, IBinder service) {Log.v(KobeWang, serviceB: service);IServiceB serviceB IServiceB.Stub.asInterface(service);try {serviceB.sendMsg(hello ServiceB);} catch (RemoteException re) {}}Overridepublic void onServiceDisconnected(ComponentName name) {}}, Context.BIND_AUTO_CREATE);} } 1.2 Server端public class ServerB extends Service {Overridepublic IBinder onBind(Intent intent) {return new ServiceB();}public class ServiceB extends IServiceB.Stub {Overridepublic void sendMsg(String msg) throws RemoteException {Log.v(KobeWang, get msg : msg);}} } 注意android:process:server这个代码后面要删除对比测试serviceandroid:name.ServerBandroid:exportedtrueandroid:process:server/service 二、运行结果2.1 android:process:server此时ServiceB(pid7120)和Client端(pid7073)运行在不同进程Client端拿到的service是ServiceB的远程代理类BinderProxyServiceB响应发生pid7120进程响应代码也是从Binder驱动中execTransact触发的。//Client端从Binder驱动中拿到的service是ServiceB的远程代理类BinderProxy 7073 7073 V KobeWang: serviceB:android.os.BinderProxy4ae510 //ServiceB中响应在另一个进程 7120 7142 V KobeWang: get msg : hello ServiceB //ServiceB中响应代码堆栈也是从Binder.execTransact开始Binder驱动触发 7120 7142 V KobeWang: java.lang.Exception: KobeWang 7120 7142 V KobeWang: at com.kobe.binderlock.ServerB$ServiceB.sendMsg(ServerB.java:20) 7120 7142 V KobeWang: at com.kobe.binderlock.IServiceB$Stub.onTransact(IServiceB.java:61) 7120 7142 V KobeWang: at android.os.Binder.execTransactInternal(Binder.java:1035) 7120 7142 V KobeWang: at android.os.Binder.execTransact(Binder.java:1008) 2.2 删除android:process:server之后此时ServiceB和Client端运行在同一进程(pid7384)Client端拿到的service直接是ServiceB的这个类继承Binder响应代码堆栈就像是直接调用ServiceB的sendMsg方法。//Client端从Binder驱动中拿到的service就是ServiceB这个类 7384 7384 V KobeWang: serviceB:com.kobe.binderlock.ServerB$ServiceB1778355 //ServiceB中响应在同一个进程的同一线程 7384 7384 V KobeWang: get msg : hello ServiceB //ServiceB中响应代码堆栈好像是直接调用ServiceB的sendMsg的方法。 7384 7384 V KobeWang: java.lang.Exception: KobeWang 7384 7384 V KobeWang: at com.kobe.binderlock.ServerB$ServiceB.sendMsg(ServerB.java:20) 7384 7384 V KobeWang: at com.kobe.binderlock.MainActivity$1.onServiceConnected(MainActivity.java:28) 7384 7384 V KobeWang: at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1948) 7384 7384 V KobeWang: at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1980) 7384 7384 V KobeWang: at android.os.Handler.handleCallback(Handler.java:883) 7384 7384 V KobeWang: at android.os.Handler.dispatchMessage(Handler.java:100) 7384 7384 V KobeWang: at android.os.Looper.loop(Looper.java:214) 7384 7384 V KobeWang: at android.app.ActivityThread.main(ActivityThread.java:7501) 7384 7384 V KobeWang: at java.lang.reflect.Method.invoke(Native Method) 7384 7384 V KobeWang: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 7384 7384 V KobeWang: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:935) 三、总结大家看明白了吧这就是Binder远程转本地的机制一个Binder对象同一个进程中拿到的是Binder对象本身另一个进程中拿到的是BinderProxy代理类跨进程调用也就变成了本地方法调用提升Binder通信效率。上面是两个进程这个机制适用于多个进程传递同一个Binder对象。进程A将Binder A通过Binder方法传递给进程B进程B拿到的是BinderProxy A进程B又将BinderProxy A通过Binder方法传递给进程C进程C拿到的还是BinderProxy A进程C将BinderProxy A通过Binder方法传递给进程A进程A拿到的却是Binder A记住一句话一个IBinder对象(Binder或者BinderProxy)通过Binder方法传递的时候Binder驱动就会校验远程转本地这个机制。如果发现这个IBinder对象的服务端Binder定义在本进程就直接返回Binder对象否则返回BinderProxy对象。四、思考AIDL oneway的这个标识符是不是在Binder远程转本地的时候是不是也就失去了意思面试官问你Binder服务端oneway方法sleep10秒是否会导致client端sleep10秒你应该知道怎么回答了吧。  回复「 篮球的大肚子」进入技术群聊回复「1024」获取1000G学习资料
http://www.zqtcl.cn/news/711588/

相关文章:

  • 公司网站开发的国内外研究现状个人网页设计大全
  • 做一个网站人员网站建设及推广优化
  • 胶州市城乡建设局网站能进封禁网站的浏览器
  • 网站做几级等保荣耀商城手机官网
  • 营销网站费用渭南网站建设公司
  • wordpress主题集成插件下载网站如何做360优化
  • 有什么在线做文档的网站网站开发需要用到哪些技术
  • 网站套餐可以分摊吗吗移动登录网页模板免费下载
  • asp网站会员注册不了但是打不开网页
  • wordpress 中文网店杭州排名优化公司
  • wordpress建站安全吗wordpress企业主题教程
  • 网站构建的开发费用信息管理系统网站开发教程
  • 自己做网站怎么维护wordpress素材模板
  • 如何选择一个好的优质网站建设公司wordpress 主题小工具
  • mysql数据库做网站广州网站seo地址
  • 福建省住房和城乡建设厅网站电话网站开发项目步骤
  • 网站注册域名多少钱淘宝网商城
  • 做架构图的网站网站和网店的区别
  • 做红包网站简单个人网站设计
  • 新手学做网站pdf手wordpress修改搜索框
  • 做湲兔费网站视颍如何通过查询网站注册时间
  • 重庆cms建站模板南通网站建设推广优化
  • 合肥网站建设的公司新闻类网站如何做量化统计
  • 好用的在线地图网站十六局集团门户网
  • 网站开发数据库连接失败广州网站建站平台
  • 鄂尔多斯北京网站建设加盟网站建设的内容
  • 网站 被 抄袭不属于营销型网站的特点
  • 浙江英文网站建设互联网公司排名2021完整版
  • 完美代码的网站python开发工具
  • 餐饮网站开发参考文献网站建设500错误代码