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

解决办法

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

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

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

效率展示:

方法一每秒更新18个frame

方法二 每秒48 个frame 更新

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

下面给大家分享背景和图像的开发技巧。

视图背景的优化

视图的背景是根据视图的大小自动调节的。不管图像的尺寸是多大,如果图像做为视图的背景的时候,图像会自动缩放来匹配填充视图的大小。当视图大小和 背景图片的尺寸不匹配的的时候,系统会自动的缩放图片。这样的自动调整如果多次甚至大量的出现在我们的应用中,那么势必会造成程序加载到延时、效率降低。 那么我们如何尽量的避免自动缩放呢?

一、提供的背景图片正好和视图的大小一致

我们在制作程序的时候选择的背景图片正好和视图的大小一致,这样可以避免背景图标的自动缩放。

有些时候我们受到一些因素的制约可能做不到这一点。例如横竖屏的差异、图片来源不受我们控制等等原因。那么这个时候我们可以考虑将图片进行预先缩放。

二、背景图片预先缩放,减少缩放次数。

预先缩放图片之后,在试图每次显示的时候就每次都去缩放图片。而是采用我们预先缩放好的图片,着可以提高效率。

originalImage = Bitmap.createScaledBitmap(
originalImage, // 缩放图像
view.getWidth(), // 视图宽度
view.getHeight(), // 视图高度
true
); // 线性过滤器

背景图片采用预先缩放的技巧和自动缩放的frame刷新频率比较如下:

左边为自动缩放的刷新频率是每秒25个frame,右边是才有预先缩放技巧的刷新率是每秒50个frame 。效率提高了50%。

窗口背景的优化

视图有背景,每个窗口也是有背景的。每一Activity是一个窗口,每一个Activity都有不同得背景。界面的绘画顺序如下:窗口——跟视图 ——子视图。当我们的跟视图已经覆盖了整个窗口的时候 ,程序还是会画一个透明的窗口的背景,而这个背景用户是看不到的。我们就需要想办法让程序在这样的情况下去掉窗口背景,节约画窗口背景的时间提高效率。

删除窗口背景的方法:

一、java代码中

public void onCreate(Bundle icicle){ super.onCreate(icicle); setContentView(R.layout.mainview); // 删除窗口背景 getWindow().setBackgroundDrawable(null); ...}

二、在xml文件中

首先在res/values/style.xml 文件中定义如下:<resources> <style name=”NoBackgroundTheme” parent=”android:Theme”> <item name=”android:windowBackground”>@null</item> </style> </resources>

<resources><style name="NoBackgroundTheme" parent="android:Theme"> <item name="android:windowBackground">@null</item></style></resources>

然后在AndroidManifest.xml文件中 找到要去掉背景的activity 书写代码如下:

<activity android:name="MyApplication" android:theme="@style/NoBackgroundTheme">...</activity>

在xml中使用时首先要检查一下时候有NoBackgroundTheme这个参数可用。

可以看到如果画了透明的窗口背景的时候刷新频率是每秒43个frame,如果删除掉窗口背景刷新频率是53个frame。

更多相关文章

  1. Android开发笔记(一百七十一)使用Glide加载网络图片
  2. android videoView 按不同比例缩放
  3. Android屏幕的大小、密度以及字符缩放比例——DisplayMetrics类
  4. . Android內核Porting相關背景知識
  5. Android开发指南-用户界面-创建菜单 .
  6. android之Fresco框架--Fresco基本使用
  7. android用户界面编程技巧——如何使用Adapter
  8. 深入浅出谈Android(安卓)几种布局方式
  9. android窗体透明的,黑暗度等的设置技巧

随机推荐

  1. 在模仿中精进数据可视化02:温室气体排放来
  2. 在pandas中使用数据透视表
  3. jupyter平台最强插件没有之一
  4. 推荐一个 Python 手绘图形库(附代码)
  5. Python中的yield到底是个什么鬼?
  6. 使用selenium自动秒抢淘宝商品(附详细入门
  7. 6个冷门但实用的pandas知识点
  8. Github | 有了这个Python备忘录,代码拿来
  9. 在模仿中精进数据可视化04:旧金山街道树木
  10. 掌握pandas中的时序数据分组运算