Android之Binder实现原理学习
[TOC]
概述Binder实现的远程调用是一种面向对象的远程调用,那么它和面向过程的远程调用区别在什么地方呢?面向过程的远程调用实现起来比较容易,只要通过某种方式把需要执行的函数号和参数传递到服务进程,然后服务进程执行对应的函数就完成了。但是面向对象的调用则不同,同一个服务类可以创建出多个对象,因此,调用时不但要通过函数号和参数来识别要执行的函数,同时还要指定具体的对象,而对象是有生命周期的,还需要管理,这将使得面向对象的实现更加复杂。但是,这种复杂也带来更强大的功能,正因为Binder是面向对象的,我们可以创建出多个Binder实体对象来服务不同的客户,每个对象有自己的数据,相互间不会干扰,而面向过程的调用则无法做到这一点,它同一时刻只能服务一个客户。
Binder实现的远程调用是一种面向对象的远程调用,那么它和面向过程的远程调用区别在什么地方呢?面向过程的远程调用实现起来比较容易,只要通过某种方式把需要执行的函数号和参数传递到服务进程,然后服务进程执行对应的函数就完成了。但是面向对象的调用则不同,同一个服务类可以创建出多个对象,因此,调用时不但要通过函数号和参数来识别要执行的函数 ...
面试题-Binder通信传递的最大数据
[TOC]
概述123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 ...
AIDL的权限校验机制
[TOC]
概述
AIDL的oneway以及in out inout的参数理解
[TOC]
概述文章参考:https://blog.csdn.net/anlian523/article/details/98476033
oneway可以用来修饰在interface之前,这样会造成interface内所有的方法都隐式地带上oneway;
oneway也可以修饰在interface里的各个方法之前。
被oneway修饰了的方法不可以有返回值,也不可以有带out或inout的参数。
带oneway的实现
AIDL使用中的异常问题汇总
[TOC]
概述问题一:AIDL使用异常:beginBroadcast() called while already in a broadcast
解决方法:
文章参考:https://blog.csdn.net/yuxuehandong/article/details/51657029
文章参考:https://github.com/HanteIsHante/NewProjectSum/issues/83
文章参考:http://www.mxguo.com/wordpress/2018/06/21/aidl-%E5%9B%9E%E8%B0%83%E4%B8%AD%E7%9A%84-illegalstateexception/
注意:这个问题在我自己的项目中,暂时还未解决!!!
问题二:AIDL调用时报错 java.lang.SecurityException: Binder invocation to an incorrect interface
解决方法:https://blog.csdn.net/HuangLin_Developer/article/details/8083259 ...
面试题-Binder通信传递的最大数据
[TOC]
文章转自:https://cloud.tencent.com/developer/article/1639706
概述我通过匿名共享内存的方式解决Binder通信是无法传递大数据的问题,一次Binder通信最大可以传输是1MB-8KB(PS:8k是两个pagesize,一个pagesize是申请物理内存的最小单元)
但是这个答案对不对呢,我只能说不准确,接下来我们来仔细研究一下。
1MB-8KB的限制来源于哪里12345678910111213141516171819// 代码位于:frameworks/native/libs/binder/ProcessState.cpp#define BINDER_VM_SIZE ((1 * 1024 * 1024) - sysconf(_SC_PAGE_SIZE) * 2)//这里的限制是1MB-4KB*2ProcessState::ProcessState(const char *driver){ if (mDriverFD >= 0) { // mmap the binder, pro ...
C++数据结构之unordered_map学习
概述文章参考:https://blog.csdn.net/weixin_45745854/article/details/122785542
unordered_map是一种关联容器,存储基于键值和映射组成的元素,即key-value。允许基于键快速查找元素。在unordered_map中,键值唯一标识元素,映射的值是一个与该对象关联的内容的对象。
对于有序和无序性:
unordered_map的无序体现在内部存储结构为哈希表,以便通过键值快速访问元素。
与之对应的有序的关联容器为map,map的有序体现在内部存储结构为红黑树,存储时元素自动按照从小到大的顺序排列。
而内部存储结构也决定了unordered_map和map在某些特性上的不同:
查找的效率
unordered_map查找效率更高,可以达到O(1),但是对于元素子集的范围迭代效率较低。
对于map,按照中序遍历的遍历次序,能够方便迭代得出从小到大的元素
unordered_map的模板定义如下:
1234567template < class Key, ...
C++数据结构之std::tuple基础学习
概述文章参考:https://blog.csdn.net/sevenjoin/article/details/88420885
tuple是一个固定大小的不同类型值的集合,是泛化的std::pair。我们也可以把他当做一个通用的结构体来用,不需要创建结构体又获取结构体的特征,在某些情况下可以取代结构体使程序更简洁,直观。std::tuple理论上可以有无数个任意类型的成员变量,而std::pair只能是2个成员,因此在需要保存3个及以上的数据时就需要使用tuple元组了。
tuple(元组)在c++11中开始引用的。tuple看似简单,其实它是简约而不简单,可以说它是c++11中一个既简单又复杂的东东,关于它简单的一面是它很容易使用,复杂的一面是它内部隐藏了太多细节,要揭开它神秘的面纱时又比较困难。
tuple的创建和初始化12345std::tuple<T1, T2, TN> t1; //创建一个空的tuple对象(使用默认构造),它对应的元素分别是T1和T2...Tn类型,采用值初始化。std::tuple<T1, T2, TN> t2 ...
C++之tie函数详解
[TOC]
概述文章参考:https://blog.51cto.com/u_15072912/3685520
tuple 即元组,可以理解为pair的扩展,可以用来将不同类型的元素存放在一起,常用于函数的多返回值。
tuple可以使用初始化列表进行赋值。
1tuple<int,double,string> t3 = {1, 2.0, "3"};
C++之inner_product函数详解
[TOC]
概述两个 vector 的内积是对应元素的乘积之和。为了能够得到内积,vector 的长度必须相同。内积是矩阵算术的基本运算。两个矩阵的乘积是一个矩阵,它是由第一个矩阵的每一行乘以第二个矩阵的每一列得到的,如图 1 所示。