android用户界面编程技巧——更新请求

此篇文章还是google官方2009年开发者日上的分享内容,前面两篇文章有过详细说明。
详细可用通过 www.cmd100.com 了解更多。
  • 情况说明

当程序的数据有改变的时候就需要更新屏幕,这个时候我们就采用invalidata方法。这个方法简单方便,而当我们调用这个方法的时候我们整个视图都发生了更新。而我们的数据一般情况下只是在某一个区域内做出改变,这个时候我们再去更新其他没有数据改变的区域就很浪费资源。这个时候我们考虑如何优化。

  • 解决办法

Android提供系统了两个局部更新数据的方法:

invalidate(Rect dirty);

invalidate(int left, int top, int right,int bottom);

利用这两个方法我们就可以只对需要更新的区域做出更新,其他不需要数据更新的区域就不会发生更新。这样节省了很多资源。

  • 实例分析:

在屏幕上触摸移动小图标。

  •  
    • 方法一:采用最简单的编码方法在每次响应移动事件的时候调用invalidate方法。

 

如图所示程序需要更新曲线框中的所有区域,也就是整个屏幕,而其中其他五个组件没有变化是不需要更新的。

  •  
    • 方法二:移动小圆圈改变的区域,其他区域不做更新。

 

如图所示程序只需要更新红色圆圈和粉红色圆圈所构成的矩形区域,即图中的虚线区域。

 

  • 效率展示:

 

方法一每秒更新18个frame

方法二  每秒48 个frame 更新

从图中可以看出局部更新的两个方法的效率是相同的。

 

欢迎大家通过cmd100 中国手机开发者联盟 交流和讨论。我的id是琴弦。

posted @ 2011-01-06 00:02  琴弦  阅读(591)  评论(0编辑  收藏  举报