现在的位置是: 小猿圈 > Android源码解析--EntropyMixer(EntropyService 随机数)服务详解
Android源码解析--EntropyMixer(EntropyService 随机数)服务详解
版权声明
本文转自https://blog.csdn.net/qq475703980/article/details/88917678,版权归原作者所有。如有侵权,请联系删除,谢谢。
分析源码为Android5.1(android 22)
EntropyMixer(EntropyService)
不明白Google为什么要改名字, 以前的EntropyService类名改为了EntropyMixer。
EntropyMixer服务主要用来产生随机数.在Android4.0以后已经更新为EntropyMixer类了,名字变了,功能还是那些。
物理学上定义熵的定义,一个系统中熵越大,则该系统越不稳定。在Android中,只有随机数处于这样一种不稳定的系统中。
在SystemServer中添加该服务的代码如下:
ServiceManager.addService("entropy", new EntropyMixer(context));
所有系统服务都是由ServiceManager的addService来添加的,并由ServiceManager统一管理。 我们看一下EntropyMixer的构造函数:
public EntropyMixer(Context context) {
//调用另一个构造函数,getSystemDir得到的是 /data/system目录
this(context, getSystemDir() + "/entropy.dat", "/dev/urandom", "/dev/hw_random");
}
/** Test only interface, not for public use */
public EntropyMixer(
Context context,
String entropyFile,
String randomDevice,
String hwRandomDevice) {
this.randomDevice = randomDevice;//1. urandom是Linux中产生随机数的设备
this.hwRandomDevice = hwRandomDevice;// /data/system/entropy.data保存了系统此前的熵信息
this.entropyFile = entropyFile;
//以下是四个关键函数
loadInitialEntropy();//1
addDeviceSpecificEntropy();//2
writeEntropy(); // 3
scheduleEntropyWriter(); // 4
//最后注册了一个广播接收者
IntentFilter broadcastFilter = new IntentFilter(Intent.ACTION_SHUTDOWN);
broadcastFilter.addAction(Intent.ACTION_POWER_CONNECTED);
broadcastFilter.addAction(Intent.ACTION_REBOOT);
context.registerReceiver(mBroadcastReceiver, broadcastFilter);
}
相应的解释已写在了上述代码中,上面所列的四个关键函数的作用如下:
- 1、loadInitialEntropy: 将entropy.dat文件中的内容写到urandom设备,这样可以增加系统随机性;
- 2、addDeviceSpecificEntropy : 将一些设备相关的信息写入urandom设备;
- 3、writeEntropy: 读取urandom设备的内容到entropy.dat文件;
- 4、scheduleEntropyWriter 向EntropyMixer 内部的Handler发送ENTROPY_WHAT消息,每三小时发一次。收到消息后,EntropyMixer会再次调用writeEntropy,将urandom设备的内容写入entropy.dat中。
EntropyMixer的代码很简单,也就200多行,但是Google的代码写得确实很厉害,尽量保证了随机数的随机性。
参考《深入理解Android》
相关文章
- Android:最全面&详细的性能优化攻略(含内存优化、内存泄漏、绘制优化、布局优化、图片优化、APK优化、多线程优化、列表优化等)_android 性能优化
- Android应用启动全流程分析(源码深度剖析)
- Android RollBack机制实现原理剖析
- Android 系统服务TelecomService启动过程原理分析_Android_脚本之家
- android 性能分析工具(01)systrace_android systrace
- Android 性能优化--快、稳、省、小_快稳省
- Swing 主题 - FlatLaf
- Gitblit:中小团队的轻量级Git服务部署与使用指南
- 解决WLS2 卡进度 0%的问题 - winddevil
- Compose折线图,贝赛尔曲线图,柱状图,圆饼图,圆环图。带动画和点击效果Compose折线图,贝赛尔曲线图,柱状图,