3.Android Skill 图像、背景、View更新、布局、内存
2014-11-05 15:35
239 查看
图像
选择适当的图像尺寸
视图背景图像总会填充整个视图区域1.视图背景图像总会填充整个视图区域
2.避免实时缩放
3.最好预先缩放到视图大小
package com.zyy.android_csdn.skill; import android.graphics.Bitmap; import android.view.View; /** * * 精致的图片 * * @author CaMnter * */ public class ExquisiteImage { // 被缩放的图片 private Bitmap originalImage; // 视图 private View view; public ExquisiteImage(Bitmap originalImage, View view) { this.originalImage = originalImage; this.view = view; } /** * @return 适应View的Bitmap */ public Bitmap getBitmap() { /** * * 第一参数:被缩放图像 * 第二参数:视图宽度 * 第三参数:视图高度 * 第四参数:双线性过滤器 * */ return Bitmap.createScaledBitmap(this.originalImage, this.view.getWidth(), this.view.getHeight(), true); } }
背景
默认情况下, 窗口有一个不透明的背景
有时可以不需要
1.最高层的视图是不透明的2.最高层的视图覆盖整个窗口
<1>.layout_width = fill_parent
<2>.layout_height = fill_parent
更新看不见的背景是浪费时间
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 删除窗口背景 getWindow().setBackgroundDrawable(null); ... }
View更新
当屏幕需要更新时, 调用 invalidate()
1.简单方便2.但是会更新整个视图, 代价太大了
最好先找到无效的区域,然后调用
1.invalidate(Rect dirty);2.invalidate(int left, int top, int right, int bottom);
优化上:就是 原来的 刷新了整个视图,现在的只是刷新了 改变后的位置和原来的位置 在内的
一块区域。
布局
越简单越好如果一个窗口包含很多视图:
1.启动时间长
2.测量时间长
3.布局时间长
4.绘制时间长
如果视图树深度太深
1.StackOverflowException
2.用户界面反应速度很慢
解决办法:
1.使用TextView的复合drawables减少层次
2.使用ViewStub延迟展开视图
3.使用<merge>合并中间视图
4.使用RelativeLayout减少层次
5.使用自定义视图
6.使用自定义布局
内存
不要随意创建 Java 对象
在以下性能敏感的代码中,尽量避免创建Java对象:1.测量:onMeasure()
2.布局:onLayout()
3.绘图:dispatchDraw(), onDraw()
4.事件处理:dispatchTouchEvent(), onTouchEvent()
5.Adapter:getView(), bindView()
GC,垃圾回收
1.整个程序会暂停
2.慢(大概好几百个毫秒)
管理好Java对象
1.使用软引用:内存缓存的最佳选择2.使用弱引用:避免内存泄露
private final HashMap<String, SoftReference<T>> mCache; public void put(String key, T value) { mCache.put(key, new SoftReference<T>(value)); } public T get(String key, ValueBuilder builder) { T value = null; SoftReferece<T> reference = mCache.get(key); if (reference != null) { value = reference.get(); } if (value == null) { value = builder.build(key); mCache.put(key, new SoftReference<T>(value)); } return value; }
相关文章推荐
- xml布局文件里直接使用背景图导致爆内存的情况处理
- 【安卓笔记】ViewPager+Fragment布局中的Fragment数据更新
- 【巨坑】recyclerview在适配器更新后布局混乱
- 封装一个工具类:回收任何布局中被Imageview吃掉的内存(附源码DEMO)
- android中如何直接将布局中的View存成图像
- (转载)Recyclerview | Intent与Bundle在传值上的区别 | 设置布局背景为白色的三种方法
- ViewPager+Fragment布局中的Fragment数据更新
- 自动布局 UITableView 更新 tableViewHeaderView高度
- Android 布局自定义Shap圆形ImageView,可以单独设置背景与图片
- 图像处理之其他杂项(二)之 opencv vs中断内存等问题解决策略 不定时更新
- Android 如何点击改变ListView行布局的TextView内容和颜色背景
- Android OOM ,回收布局文件中ImageView占用的内存.Bitmap OOM回收解决.
- codebook 背景建模更新及码本模型如何释放内存
- Android布局自定义Shap圆形ImageView可以单独设置背景与图片
- 【安卓笔记】ViewPager+Fragment布局中的Fragment数据更新
- div css sprites精灵-CSS图像拼合 CSS贴图定位网页背景素材图片拼合定位布局技术教程
- Android布局自定义Shap圆形ImageView,可以单独设置背景与图片
- Android布局自定义Shap圆形ImageView,可以单独设置背景与图片
- IOS_设置UITableView Section的背景颜色和字体颜色(自定义section布局)
- 用colorWithPatternImage设置view背景太占内存,替代方法