安卓UI优化

一、使用系统资源:
Android系统本身有很多资源在应用中都可以直接使用,具体的,可以进入android-sdk的相应文件夹中去查看。
例如:可以进入 androidsdk \platforms\android-8\data\res,里面的系统资源就一览无余了。

1、使用系统的id来标识
分两种:
R.id.list(自定义的R类)/android.R.id.list(系统资源R类)
android:id=”@android:id/list”
—》Java代码中获取:android.R.id.list;

2、利用系统的图片资源(另一个是能保证我们的应用程序的风格与系统一致)
3、利用系统的字符串资源(已经支持多语言环境了)

  <TextView

        android:id="@+id/title"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:textAppearance="?android:attr/textAppearanceMedium" />

4、利用系统的颜色定义

android:background ="@android:color/transparent"

二、把相同布局的代码单独写成一个模块:
1)背景。

2)头部的标题栏。

3)底部的导航栏。如果应用有导航栏,而且大部分的Activity的底部导航栏是相同的,就可以将导航栏写成一个通用模块。

4)ListView。通用的模块比较好。

三、隐藏布局文件可以使用延迟加载(viewstub)
代码:

<ViewStub
android:id="@+id/stub_import"
android:inflatedId="@+id/panel_import"
android:layout="@layout/progress_overlay"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom" />

//获取资源:

((ViewStub) findViewById(R.id.stub_import)).setVisibility(View.VISIBLE);
// 或者
View importPanel = ((ViewStub) findViewById(R.id.stub_import)).inflate();

///分析:
ViewStub可以与xml文件里面指定的布局资源文件关联起来,让布局资源文件在需要使用的时候再加载上去

四、弱引用与软引用的根本区别在于:
( 1 ) 相对对象而言:
只具有弱引用的对象拥有更短暂的生命周期,可能随时被回收。而只具有软引用的对象只有当内存不够的时候才被回收,在内存足够的时候,通常不被回收。
( 2 ) 应用:
在java.lang.ref包中提供了几个类:SoftReference类、WeakReference类和PhantomReference类,它们分别代表软引用、弱引用和虚引用。ReferenceQueue类表示引用队列,它可以和这三种引用类联合使用,以便跟踪Java虚拟机回收所引用的对象的活动。

(3)、实验:
我们的应用会用到大量的默认图片:一个图片,多个地方用到,每次都去硬件中读取,耗时,可以将图片缓存到内存中;
问题:比较容易发生OutOfMemory异常

解决:使用软引用:
使用软引用以后,在OutOfMemory异常发生之前,这些缓存的图片资源的内存空间可以被释放掉的,从而避免内存达到上限,避免Crash发生。

实现代码:

//实例化定义一个HashMap,保存软引用对象。
private Map<String, SoftReference<Bitmap>> imageCache 
     = new HashMap<String, SoftReference<Bitmap>>();

//保存操作
 public void addBitmapToCache(String path) {

        // 强引用的Bitmap对象

        Bitmap bitmap = BitmapFactory.decodeFile(path);

        // 软引用的Bitmap对象

        SoftReference<Bitmap> softBitmap = new SoftReference<Bitmap>(bitmap);

        // 添加该对象到Map中使其缓存

        imageCache.put(path, softBitmap);

    }

/获取:

“`
public Bitmap getBitmapByPath(String path) {
// 从缓存中取软引用的Bitmap对象
SoftReference softBitmap = imageCache.get(path);
// 判断是否存在软引用
if (softBitmap == null) {
return null;
}
// 取出Bitmap对象,如果由于内存不足Bitmap被回收,将取得空
Bitmap bitmap = softBitmap.get();
return bitmap;
}

/使用区分:
(1)如果只是想避免OutOfMemory异常的发生,则可以使用软引用。

如果对于应用的性能更在意,想尽快回收一些占用内存比较大的对象,则可以使用弱引用。

(2)还有就是可以根据对象是否经常使用来判断。

如果该对象可能会经常使用的,就尽量用软引用。

如果该对象不被使用的可能性更大些,就可以用弱引用。

(3)和弱引用功能类似的是WeakHashMap。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值