Android下产生随机数的方法的选择
2015-10-30 16:03
666 查看
首先界面上放一个TextView控件,一个Button按钮,要实现点击按钮,改变文本控件的文字的颜色。其实实现起来并不难,而且是特别简单的那种,但是我遇到了一些问题,经过和同学与老师的一番讨论,总结了一下产生随机数的方法的使用。
我们完成初始化界面和对Button设置点击事件doClick后,在方法里这样写:
楼主认为这种是写得还不错的一种,但是我为了偷懒,并没有定义red,greed,blue变量,而是在Color.rgb()方法里直接new出了三个Random对象作为参数。
这看上去好像也没什么不同的,但实际运行后我就发现了大有不同!!!
第一种点击按钮颜色变换十分的均匀,颜色变化明显,但是第二种变换时而明显,时而不明显,这是到底是怎么回事呢?
我刚开始以为是我产生随机数的方法不对,我又使用了另一种方法产生随机数,
于是我尝试了另一种写法:
我发现这种写法与只用一个Random对象一样,颜色变化十分的均匀。于是我比较了一下两种产生随机数的方法:我发现Math.random()里面也是调用的Random的构造方法,而且Random产生随机数是根据系统当前的时间加上一个HashCode的值作为生产种子,切生产种子是使用synchronized修饰的,但不同的是Math.random()方法使用了同步synchronized修饰,说明此方法时线程安全的,而Random则没有,所以在调用Color.rgb()方法时,第一种方法产生的三个线程会互相的干扰,而第二种则不会,但是第二种会较为消耗系统资源,所以我们根据不同的情况来使用Random和Math.random两种产生随机数的方法,若想使颜色变化均匀,如果有多个线程同时产生随机数,使用第二种Math.random()更安全,代价是会影响可扩展性,若只有单个线程想产生随机数,也就是只用一个对象产生随机数时,推荐使用Random。
我们完成初始化界面和对Button设置点击事件doClick后,在方法里这样写:
Random random = new Random(); int red = random.nextInt(256); int green = random.nextInt(256); int blue = random.nextInt(256); tv1.setTextColor(Color.rgb(red, green, blue));
楼主认为这种是写得还不错的一种,但是我为了偷懒,并没有定义red,greed,blue变量,而是在Color.rgb()方法里直接new出了三个Random对象作为参数。
tv1.setTextColor(Color.rgb(new Random().nextInt(256),new Random().nextInt(256), new Random().nextInt(256)));
这看上去好像也没什么不同的,但实际运行后我就发现了大有不同!!!
第一种点击按钮颜色变换十分的均匀,颜色变化明显,但是第二种变换时而明显,时而不明显,这是到底是怎么回事呢?
我刚开始以为是我产生随机数的方法不对,我又使用了另一种方法产生随机数,
于是我尝试了另一种写法:
tv1.setTextColor(Color.rgb((int) (Math.random() * 256),(int)( Math.random() * 256), (int) (Math.random() * 256)));
我发现这种写法与只用一个Random对象一样,颜色变化十分的均匀。于是我比较了一下两种产生随机数的方法:我发现Math.random()里面也是调用的Random的构造方法,而且Random产生随机数是根据系统当前的时间加上一个HashCode的值作为生产种子,切生产种子是使用synchronized修饰的,但不同的是Math.random()方法使用了同步synchronized修饰,说明此方法时线程安全的,而Random则没有,所以在调用Color.rgb()方法时,第一种方法产生的三个线程会互相的干扰,而第二种则不会,但是第二种会较为消耗系统资源,所以我们根据不同的情况来使用Random和Math.random两种产生随机数的方法,若想使颜色变化均匀,如果有多个线程同时产生随机数,使用第二种Math.random()更安全,代价是会影响可扩展性,若只有单个线程想产生随机数,也就是只用一个对象产生随机数时,推荐使用Random。
相关文章推荐
- [置顶] 【android】音乐播放器之设计思路
- ionic android下双击返回退出应用
- Android中自定义View的MeasureSpec使用
- Android简单用属性动画实现两个控件重叠
- android 性能系列
- Android中实现全屏、无标题栏的两种办法(转)
- android笔记之消息 通知
- android监测电池的电量与充电状态
- Android Studio导入jar后无法识别、但项目能正常运行的问题
- 【FastDev4Android框架开发】AndroidAnnnotations注入框架使用之事件绑定Event Binding(十一)
- android 音乐波形图
- Android通过Intent.ACTION_CLOSE_SYSTEM_DIALOGS监听Home按键消息
- Android开源库
- 日报2015/10/30(极客学院安卓视频学习)
- Android-连续按两次返回键实现应用程序退出
- 《第一行代码——Android》之日志工具介绍
- Android 最简单的圆形头像
- Android实现抽奖转盘
- Android 调用摄像头拍照 以及 从相册中选择照片
- Android中十六进制颜色的基本使用