Android开发应用之触发屏幕图形触摸器的优化

2016-03-11 16:27:36 659浏览

        在Android模拟器中,当用鼠标单击一次模拟器屏幕然后释放,会先触发ACTION DOWN,然后ACTION UP。如果是在屏幕上移动那么才会触发ACTION MOVE的动作。但是这只是模拟器的效果,接下来看一下真机与模拟器的区别。

        Android培训Android开发应用之触发屏幕图形触摸器的优化

        当我们的Android开发应用之触发屏幕图形触摸器的优化用户在玩游戏的时候,尤其是RPG这种类型的游戏,肯定需要会长时间的去触屏按我们的虚拟按键,比如我们会在屏幕上画上一个虚拟方向盘类似这样子。那么其实ACTION MOVE这个事件会被Android一直在响应。

        为什么会一直响应ACTIoN MOVE这个动作昵?如果用户没有移动手指而是静止不动也会一直响应?具体原因有如下两点:

        第一点:因为Android对于触屏事件很敏感。

        第二点:虽然我们的手指感觉是静止没有移动,其实事实不是如此!当我们的手指触摸到手机屏幕上之后,感觉静止没动,其实手指在不停地微颤。对此,读者可以具体尝试。

        开始具体分析,如果ACTION MOVE此时间一直被Android一直不停地响应并处理,无疑对我们游戏的性能增加了不少的负担。比如我们项目线程绘图时间每次用了100ms,那么当手指触摸屏幕,这短暂的0.1秒内大概会产生10个左右的MotionEvent,并且系统会尽可能快地把这些event发给监听线程,这样在这一段时间内CPU就会忙于处理onTouchEvent,严重的话可能会造成画面一卡一卡的。

        那么我们其实根本用不着按键响应这么多次,而只需在我们每次绘图后,或者绘图前接受一次用户按键即可,这样能让帧率不至于下降的太厉害。我们需要控制这个时间让它慢下来,随着我们的绘图时间一起来合作,这样就能减少系统线程的负担。

        也可能有的读者会问为什么不用sleep()的方法,其实如果只是想让线程休眠指定时间的话可以用sleep0函数,但是这个没有资源锁的限制。而Object的wait()和notify()方法通常用在时间不定的条件限制等待,并且必须写在同步代码块中。

        也可能有的读者会问为什么不用当前类的object来使用:this.wait(),而是new一个object。因为synchronized中的Object表示Object调用wait()必须拥有该对象的监视锁,当前我们有了object的锁,就要用object调用wait()。

 查看更多关于“Android培训资讯”的相关文章>>

标签:

热门专区

暂无热门资讯

课程推荐

微信
微博
15311698296

全国免费咨询热线

邮箱:codingke@1000phone.com

官方群:148715490

北京千锋互联科技有限公司版权所有   北京市海淀区宝盛北里西区28号中关村智诚科创大厦4层
京ICP备12003911号-6   Copyright © 2013 - 2019

京公网安备 11010802030908号