外汇做单记录做单专业网站有哪些如何区分网站开发语言

diannao/2026/1/27 5:27:27/文章来源:
外汇做单记录做单专业网站有哪些,如何区分网站开发语言,wordpress给导航加图标,企业crm系统前言 对于Android来说#xff0c;Binder的重要性怎么说都不为过。不管是我们的四大组件Activity、Service、BroadcastReceiver、ContentProvider#xff0c;还是经常在应用中使用到的各种ServiceManager#xff0c;其背后都是Binder在支撑。然而Binder机制又不是三言两语能够… 前言 对于Android来说Binder的重要性怎么说都不为过。不管是我们的四大组件Activity、Service、BroadcastReceiver、ContentProvider还是经常在应用中使用到的各种ServiceManager其背后都是Binder在支撑。然而Binder机制又不是三言两语能够描述得清楚的因此本文通过对一个简单的AIDL Demo进行分析让读者对Binder有个初步的认识要想深入了解Binder背后的原理可以参考最后的延伸阅读。 Demo 首先我们通过AIDL新建一个跨进程通信的Demo然后在代码中简单分析Binder的运行过程。 Server Module 我们先新建一个提供接口的AIDL服务端module服务端主要提供AddBook和getBookList两个功能其目录如下 p2.png IBookManager.AIDL// IAIDLServer.aidl package com.nancyyihao.aidlserver; import com.nancyyihao.aidlserver.Book;// Declare any non-default types here with import statementsinterface IBookManager {ListBook getBookList();void addBook(in Book book); }Book.javapackage com.nancyyihao.aidlserver;import android.os.Parcel; import android.os.Parcelable;/*** Created by jumper on 2016/9/7.*/ public class Book implements Parcelable {private String bookName;private int bookId;public Book(){}public Book(int bookId, String bookName){this.bookId bookId ;this.bookName bookName ;}public Book(Parcel parcel){bookName parcel.readString();bookId parcel.readInt();}public String getBookName() {return bookName;}public void setBookName(String bookName) {this.bookName bookName;}public int getBookId() {return bookId;}public void setBookId(int bookId) {this.bookId bookId;}Overridepublic int describeContents() {return 0;}Overridepublic void writeToParcel(Parcel dest, int flags) {dest.writeString(bookName);dest.writeInt(bookId);}public static final Parcelable.CreatorBook CREATOR new CreatorBook(){Overridepublic Book createFromParcel(Parcel source) {return new Book(source);}Overridepublic Book[] newArray(int size) {return new Book[size];}}; }Book.AIDLpackage com.nancyyihao.aidlserver; parcelable Book;BookManagerServicepackage com.nancyyihao.aidlserver;import android.app.Service; import android.content.Intent; import android.os.Binder; import android.os.IBinder; import android.os.RemoteException;import java.util.List; import java.util.concurrent.CopyOnWriteArrayList;/*** Created by jumper on 2016/9/7.*/ public class BookManagerService extends Service {private static final String TAG BMS;private CopyOnWriteArrayListBook mBookList new CopyOnWriteArrayList();Overridepublic IBinder onBind(Intent intent) {return mBinder;}Overridepublic void onCreate() {super.onCreate();// to distinguish with client module, we set the book id different from client modulemBookList.add(new Book(3,Android));mBookList.add(new Book(4,iOS));}private Binder mBinder new IBookManager.Stub() {Overridepublic ListBook getBookList() throws RemoteException {return mBookList;}Overridepublic void addBook(Book book) throws RemoteException {mBookList.add(book);}} ; }Client Module 把Server module的代码拷贝一份(AIDL包名不能变)然后新建一个MainActivity即可 MainActivitypackage com.nancyyihao.aidlserver;import android.content.ComponentName; import android.content.Intent; import android.content.ServiceConnection; import android.os.Bundle; import android.os.IBinder; import android.support.v7.app.AppCompatActivity; import android.util.Log;import com.nancyyihao.R;import java.util.List;public class MainActivity extends AppCompatActivity {private static final String TAG MainActivity;private ServiceConnection mConnection new ServiceConnection() {Overridepublic void onServiceConnected(ComponentName name, IBinder service) {IBookManager bookManager IBookManager.Stub.asInterface(service);Log.e(trace, onServiceConnected);try {ListBook bookList bookManager.getBookList();Log.e(TAG, query book list, list type: bookList.getClass().getCanonicalName());Log.e(TAG, query book list: bookList.toString());} catch (Exception e) {e.printStackTrace();}}Overridepublic void onServiceDisconnected(ComponentName name) {}};Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);final Intent intent new Intent();intent.setAction(com.nancyyihao.startservice);intent.setPackage(com.nancyyihao.aidlserver); // servers package nameLog.e(trace, bindService);bindService(intent, mConnection, BIND_AUTO_CREATE);}Overrideprotected void onDestroy() {super.onDestroy();unbindService(mConnection);} }分析 把代码写好后build一下就能看到自动生成了一个IBookManager.Java文件 IBookManager.Javap3.png package com.nancyyihao.aidlserver; // Declare any non-default types here with import statementspublic interface IBookManager extends android.os.IInterface {/*** Local-side IPC implementation stub class.*/public static abstract class Stub extends android.os.Binder implements com.nancyyihao.aidlserver.IBookManager {private static final java.lang.String DESCRIPTOR com.nancyyihao.aidlserver.IBookManager; // Binder Indentifierpublic Stub() {this.attachInterface(this, DESCRIPTOR);}/*** Cast an IBinder object into an com.nancyyihao.aidlserver.IBookManager interface,* generating a proxy if needed.*/public static com.nancyyihao.aidlserver.IBookManager asInterface(android.os.IBinder obj) {if ((obj null)) {return null;}android.os.IInterface iin obj.queryLocalInterface(DESCRIPTOR);if (((iin ! null) (iin instanceof com.nancyyihao.aidlserver.IBookManager))) {return ((com.nancyyihao.aidlserver.IBookManager) iin); // local Binder}return new com.nancyyihao.aidlserver.IBookManager.Stub.Proxy(obj); // remote Binder}Overridepublic android.os.IBinder asBinder() {return this;}Overridepublic boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException {switch (code) {case INTERFACE_TRANSACTION: {reply.writeString(DESCRIPTOR);return true;}case TRANSACTION_getBookList: {data.enforceInterface(DESCRIPTOR);java.util.Listcom.nancyyihao.aidlserver.Book _result this.getBookList();reply.writeNoException();reply.writeTypedList(_result);return true;}case TRANSACTION_addBook: {data.enforceInterface(DESCRIPTOR);com.nancyyihao.aidlserver.Book _arg0;if ((0 ! data.readInt())) {_arg0 com.nancyyihao.aidlserver.Book.CREATOR.createFromParcel(data);} else {_arg0 null;}this.addBook(_arg0);reply.writeNoException();return true;}}return super.onTransact(code, data, reply, flags);}private static class Proxy implements com.nancyyihao.aidlserver.IBookManager {private android.os.IBinder mRemote;Proxy(android.os.IBinder remote) {mRemote remote;}Overridepublic android.os.IBinder asBinder() {return mRemote;}public java.lang.String getInterfaceDescriptor() {return DESCRIPTOR;}Overridepublic java.util.Listcom.nancyyihao.aidlserver.Book getBookList() throws android.os.RemoteException {android.os.Parcel _data android.os.Parcel.obtain();android.os.Parcel _reply android.os.Parcel.obtain();java.util.Listcom.nancyyihao.aidlserver.Book _result;try {_data.writeInterfaceToken(DESCRIPTOR);mRemote.transact(Stub.TRANSACTION_getBookList, _data, _reply, 0);_reply.readException();_result _reply.createTypedArrayList(com.nancyyihao.aidlserver.Book.CREATOR);} finally {_reply.recycle();_data.recycle();}return _result;}Overridepublic void addBook(com.nancyyihao.aidlserver.Book book) throws android.os.RemoteException {android.os.Parcel _data android.os.Parcel.obtain();android.os.Parcel _reply android.os.Parcel.obtain();try {_data.writeInterfaceToken(DESCRIPTOR);if ((book ! null)) {_data.writeInt(1);book.writeToParcel(_data, 0);} else {_data.writeInt(0);}mRemote.transact(Stub.TRANSACTION_addBook, _data, _reply, 0);_reply.readException();} finally {_reply.recycle();_data.recycle();}}}static final int TRANSACTION_getBookList (android.os.IBinder.FIRST_CALL_TRANSACTION 0);static final int TRANSACTION_addBook (android.os.IBinder.FIRST_CALL_TRANSACTION 1);}public java.util.Listcom.nancyyihao.aidlserver.Book getBookList() throws android.os.RemoteException;public void addBook(com.nancyyihao.aidlserver.Book book) throws android.os.RemoteException; } Client先调用bindService启动服务会调用BookManagerService的onCreate方法接着调用onBind方法该方法会返回远程的Binder---mBinder该Binder包含getBookList和AddBook两个方法的具体实现。 Overridepublic IBinder onBind(Intent intent) {return mBinder;}private Binder mBinder new IBookManager.Stub() {Overridepublic ListBook getBookList() throws RemoteException {return mBookList;}Overridepublic void addBook(Book book) throws RemoteException {mBookList.add(book);}} ;当Client和server成功建立连接时就会调用Client的onServiceConnected(name, service)方法把远程的mBinder回调给Client此时的service就是远程的mBinder对象 private ServiceConnection mConnection new ServiceConnection() {Overridepublic void onServiceConnected(ComponentName name, IBinder service) {IBookManager bookManager IBookManager.Stub.asInterface(service);Log.e(trace, onServiceConnected);try {ListBook bookList bookManager.getBookList();} catch (Exception e) {e.printStackTrace();}}Client端通过asInterface方法把mBinder转成AIDL接口如果是本进程内的Binder就直接返回否则返回内部代理类proxy public static com.nancyyihao.aidlserver.IBookManager asInterface(android.os.IBinder obj) {if ((obj null)) {return null;}android.os.IInterface iin obj.queryLocalInterface(DESCRIPTOR);if (((iin ! null) (iin instanceof com.nancyyihao.aidlserver.IBookManager))) {return ((com.nancyyihao.aidlserver.IBookManager) iin); // local Binder}return new com.nancyyihao.aidlserver.IBookManager.Stub.Proxy(obj); // remote Binder}接着执行 try {ListBook bookList bookManager.getBookList();} catch (Exception e) {e.printStackTrace();}此时的bookManager通过asInterface方法转换后返回的实际上是本地的proxy类 private static class Proxy implements com.nancyyihao.aidlserver.IBookManager {private android.os.IBinder mRemote;Proxy(android.os.IBinder remote) {mRemote remote;}Overridepublic android.os.IBinder asBinder() {return mRemote;}public java.lang.String getInterfaceDescriptor() {return DESCRIPTOR;}Overridepublic java.util.Listcom.nancyyihao.aidlserver.Book getBookList() throws android.os.RemoteException {android.os.Parcel _data android.os.Parcel.obtain();android.os.Parcel _reply android.os.Parcel.obtain();java.util.Listcom.nancyyihao.aidlserver.Book _result;try {_data.writeInterfaceToken(DESCRIPTOR);mRemote.transact(Stub.TRANSACTION_getBookList, _data, _reply, 0);_reply.readException();_result _reply.createTypedArrayList(com.nancyyihao.aidlserver.Book.CREATOR);} finally {_reply.recycle();_data.recycle();}return _result;}Overridepublic void addBook(com.nancyyihao.aidlserver.Book book) throws android.os.RemoteException {android.os.Parcel _data android.os.Parcel.obtain();android.os.Parcel _reply android.os.Parcel.obtain();try {_data.writeInterfaceToken(DESCRIPTOR);if ((book ! null)) {_data.writeInt(1);book.writeToParcel(_data, 0);} else {_data.writeInt(0);}mRemote.transact(Stub.TRANSACTION_addBook, _data, _reply, 0);_reply.readException();} finally {_reply.recycle();_data.recycle();}}}static final int TRANSACTION_getBookList (android.os.IBinder.FIRST_CALL_TRANSACTION 0);static final int TRANSACTION_addBook (android.os.IBinder.FIRST_CALL_TRANSACTION 1);}通过代码我们可以看到proxy类其实也是一个IBookManager接口调用bookManager.getBookList()其实是调用Proxy.getBookList。 Overridepublic java.util.Listcom.nancyyihao.aidlserver.Book getBookList() throws android.os.RemoteException {android.os.Parcel _data android.os.Parcel.obtain();android.os.Parcel _reply android.os.Parcel.obtain();java.util.Listcom.nancyyihao.aidlserver.Book _result;try {_data.writeInterfaceToken(DESCRIPTOR);mRemote.transact(Stub.TRANSACTION_getBookList, _data, _reply, 0);_reply.readException();_result _reply.createTypedArrayList(com.nancyyihao.aidlserver.Book.CREATOR);} finally {_reply.recycle();_data.recycle();}return _result;}在Proxy.getBookList方法中调用了mRemote.trasact() public final boolean transact(int code, Parcel data, Parcel reply,int flags) throws RemoteException {if (false) Log.v(Binder, Transact: code to this);if (data ! null) {data.setDataPosition(0);}boolean r onTransact(code, data, reply, flags);if (reply ! null) {reply.setDataPosition(0);}return r;}Client就是在这里和Server进行远程通信的把需要的参数放data中服务端执行完后把接口写到result里。从代码中可以看到transact方法中调用了onTransact方法。我们再看看onTransact方法有啥东西。 Overridepublic boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException {......case TRANSACTION_getBookList: {data.enforceInterface(DESCRIPTOR);java.util.Listcom.nancyyihao.aidlserver.Book _result this.getBookList();reply.writeNoException();reply.writeTypedList(_result);return true;}......}直接调用了this.getBookList方法返回结果这个this到底是哪个对象前面提到mRemote其实是远程中的Binder对象其代码如下 private Binder mBinder new IBookManager.Stub() {Overridepublic ListBook getBookList() throws RemoteException {return mBookList;}Overridepublic void addBook(Book book) throws RemoteException {mBookList.add(book);}} ;this.getBookList其实就是mRemote.getBookList就是上面代码中的mBinder.getBookList然后把返回结果放到result中即可。至此整个通信过程分析完毕。 总结 Client是通过本地的Proxy类像Server发起通信Client通过ServerConnection接口回调收到Server远程Binder对象IPC过程发生在transact方法中该方法会挂起直到服务端返回结果因此不能在主线程调用远程服务。p1.jpg 图片和文中Demo来自《Android开发技术探索》 源码下载 Android-AIDL-Demo延伸阅读 Binder学习指南Android Bander设计与实现 - 设计篇Android进程间通信IPC机制Binder简要介绍和学习计划 转载于:https://www.cnblogs.com/jasonkent27/p/5860680.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/87719.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

海外高延迟服务器做网站交友征婚婚恋网站系统php+mysql.rar

在当今快节奏的社交和工作环境中,实时通讯已经变得至关重要。无论是在线游戏的即时交流,还是团队协作中的实时消息传递,都需要强大的实时通讯功能来支持。而在前端开发中,利用Socket.io这一强大的工具库,实现实时通讯功…

做书店网站版头南通网站定制费用

目录 安装VMwere Workstion 虚拟机的操作过程 CentOS 7 安装过程 install CentOS 7 安装操作系统 安装VMwere Workstion 虚拟机的操作过程 更改安装位置 到下面图片中的这一个步骤,可以点击许可证,输入密钥就可以使用了, 密钥可以去某度或…

wordpress集成微信支付站长工具seo综合查询广告

[FastDDS] 基于eProsima FastDDS的移动机器人数据中间件——介绍与准备工作 注明:无 本栏目主要讲述,基于eProsima FastDDS的移动机器人数据中间件的实现、使用、性能测试。 What is [ FastDDS ]: eProsima Fast DDS是DDS(数据分发服务&…

网站底部导航景观设计公司排名前十强

搭建教程 Nginx1.2 PHP5.6-7.2均可 最好是7.2 第一步上传文件程序到网站根目录解压 第二步导入数据库(dkewl.sql) 第三步修改/config/database.php里面的数据库地址 第四步修改/config/extra/ip.php里面的域名 第四步设置伪静态thinkphp 总后台账…

电子商务网站建设基础项目实训报告wordpress搜索插件

传送门 文章目录题意:思路:题意: 思路: 看到异或的话,很容易想到用01trie来贪心的搞,但是这个题涉及区间问题,直接搞的话需要将[l,r][l,r][l,r]的数都插入trie里面,这样的复杂度显然…

淄博哪里有网站建设平台家装风格效果图大全

文章目录 一、网络基本概念1. OSI 7层模型1.1 每层对应的协议1.2 每层涉及的设备1.2.1 物理层设备1.2.2 数据链路层设备1.2.3 网络层设备1.2.4 传输层设备1.2.5 交换机和路由器的应用1.2.6 问题 2. TCP/IP 4层模型3. 物理层传输介质3.1 冲突域 4. 数据链路层4.1 以太网帧结构4.…

做视频网站广告收费定制网站

【JavaWeb】Spring非阻塞通信 - Spring Reactive之WebFlux的使用 文章目录 【JavaWeb】Spring非阻塞通信 - Spring Reactive之WebFlux的使用参考资料一、初识WebFlux1、什么是函数式编程1)面向对象编程思维 VS 函数式编程思维(封装、继承和多态描述事物间…

自己做国外网站买衣服广东网站建设专业公司哪家好

内容简介文章介绍ImageView(方法也可以应用到其它View)圆角矩形(包括圆形)的一种实现方式,四个角可以分别指定为圆角。思路是利用“Xfermode Path”来进行Bitmap的裁剪。背景圆角矩形实现的方法应该很多,网上一大堆。很怀疑为啥安卓的控件不内置这样的属…

网站优化推广怎么做百度搜索网页版入口

摘要: 故事来源于《sql server2012 深入解析和性能分析》 1.重要的PerfMon CPU计数器 计数器查看内容发生问题的条件Processor%Processor TimeCPU为生产环境的请求提供服务消耗的时间占总CPU时间的百分比>80%Processor%Privilege Time  CPU为内核模式请求提供服务消耗的时…

班级做网站人的叫什么厚街建设网站

需求分析: Button 组件大部分关注样式,没有交互 根本分析可以得到具体的属性列表: type:不同的样式(Default,Primary,Danger,Info,Success,Warning) plain:样式的不同展现模式boolean round:圆角boolean circle:圆形按钮,适合图标…

高校学风建设网站老婆中文字幕完整版第二季

世界水评估方案指标 概述(Overview)数据下载(Data Download)案例1:F. Irrigated lands案例2:G. Irrigated water use参考World Water Development Report II-Indicators for World Water Assessment Programme 概述(Overview) 在关于全球环境变化和可持续发展的辩论…

网站建设需要做的优化工作文职人员招聘2023官网

转载于:https://www.cnblogs.com/yanyuying/p/6690662.html

网站设计规划的一般流程python不用框架做网站

在CentOS7中,有很多CentOS 6中的常用服务发生了变化。 其中iptables是其中比较大的一个。防火墙iptables被firewalld取代。 本文将介绍,如果采用systemctl关闭firewalld,开启iptables。 1.关闭firewalld [roothwcentos70-01 system]# systemc…

营销型企业网站建站做网站怎么弄

*************************************************** 更多精彩,欢迎进入:http://shop115376623.taobao.com *************************************************** 良好的编程习惯良好的习惯对于人的成长是非常重要的,良好的编程习惯对于我…

网站开发使用的技术青岛硅谷网站建设公司

2013-01-20 std::set/std::map (以下用 std::map 代表) 是常用的关联式容器,也是 ADT(抽象数据类型)。也就是说,其接口(不是 OO 意义下的 interface)不仅规定了操作的功能&#xff…

大唐工作室 网站制作怎样建网站教程

下载文件,得到一个gif 打开,发现真的闪的好快啊 gif分解网站:https://tu.sioe.cn/gj/fenjie/ GIF动态图片分解 逐个截屏下来 再逐个通过CQR.exe扫描,得到 SYC{F1aSh_so_f4sT}

影楼网站设计网站投资设计

Transformer架构自从2017年被提出以来,已经在自然语言处理(NLP)和其他领域成为了一种革命性的模型结构。它不仅在各种NLP任务中取得了突破性的表现,也被扩展应用于图像处理、音频处理等领域。理解Transformer架构及其顶层应用的基…

阿里巴巴网站建设初衷网站技术部门架构

PHP浮点比较大小的方法本文实例讲述了PHP浮点比较大小的方法。分享给大家供大家参考,具体如下:/*** 浮点数一般是不能用来比较大小的,但是我们可以用一种变通的的方式* 用var_dump输出浮点是看不出效果的,可以用serialize查看* 1.round 2.浮点…

做鲜花的网站有哪些咸阳北京网站建设

Analysis:文本分析是把全文本转换一系列单词的过程,也叫分词。Analysis是通过Analyzer(分词器)来实现的。 1.Analyzer组成 注意:在ES中默认使用标准分词器:StandardAnalyzer。特点是:中文是单字分词,英文是…

优秀企业网站欣赏店名设计网络直播平台搭建

这段代码非常令人困惑.流程不合逻辑,异常处理很糟糕.像if(p! path)和if(cookys! cookies)之类的对象引用比较没有任何意义.要比较对象的内容,您需要使用equals()方法.到目前为止,我知道您希望在同一个域上的一堆后续Jsoup请求中维护cookie.在这种情况下,…