Understanding Android Source: ASHMEM

Android

本文介绍了对作者Android匿名共享内存的认识,这些认识来自于对三本书的学习,分别是《Android系统源代码情景分析》、《深入理解Linux内核》、《Unix网络编程 卷二:进程间通信》。作者能力水平有限,难免在一些文字上鹦鹉学舌,错误也难免,敬请读者注意甄别。

[ Read More » ]

thermal-engine 与手机发烫、卡顿

Android

我自己编译AOSP已经很久了,也陆续刷机到Nexus 5和Pixel上,虽然之前也有遇到过缺失系统库文件一类的问题,但也都解决了。不过,一直以来有个问题困扰着我,那就是在Nexus 5上的耗电问题。

[ Read More » ]

Understanding Android Source: Binder Driver

Android

Binder驱动扮演的角色主要有:

  • 提供Binder通信的渠道;
  • 维护Binder对象的计数;
  • 转换传输中Binder实体对象和引用对象;
  • 管理数据缓冲区。
[ Read More » ]

Understanding Android Source: Binder Library

Android

Android Binder的前身是OpenBinder,已经于2014年10月合并入Linux主线,得到Linux阵营的认可。其可以理解为一种面向对象的远程调用。

[ Read More » ]

Understanding Android Source: RefBase, wp, sp

Android

管理对象生命周期,常常会采用引用计数技术。当有一个新的指针指向了一个对象时,这个对象的引用计数就增加1;相反,当一个指针不再指向一个对象时,这个对象的引用计数就减少1。而当对象的引用计数减少为0时,它所占用的内存就可以被安全地释放了。

上述方案可以应对大部分使用场景,但是,对于相互引用的情况,却无能为力。比如,两个对象A和B,A引用了B,同时B也引用了A。在任何时间,它们都被对方引用着,以致于无法被释放。对此,一般做法是通过强、弱引用计数予以解决。将有关联的对象划分为“父-子”和“子-父”关系。在前者中,“父”对象通过强引用计数来引用“子”对象;在后者中,“子”对象通过弱引用计数来引用“父”对象。

[ Read More » ]
←Older