android-context 静态属性优化分享

在代码优化的过程中,我们需要对代码中的静态变量特别留意。静态变量是类相关的变量,它的生命周期是从这个类被声明,到这个类彻底被垃圾回收器回收才会被销毁。所以,一般情况下,静态变量从所在的类被使用开始就要一直占用着内存空间,直到程序退出。如果不注意,静态变量引用了占用大量内存的资源,造成垃圾回收器无法对内存进行回收,就可能造成内存的浪费。

  
private static Resources mResources; 
@Override
protected void onCreate(Bundle state) {
super.onCreate(state);
if (mResources == null) {
    mResources = this.getResources();
    }
}

经验分享:

在实际项目中,我们经常会把一些对象的引用加入到集合中,如果这个集合是静态的话,就需要特别注意了。
当不需要某对象时,务必及时把它的引用从集合中清理掉。或者可以为集合提供一种更新策略,及时更新整个集合,
这样可以保证集合的大小不超过某值,避免内存空间的浪费。
 

2)使用Application的Context

在Android中,Application Context的生命周期和应用的生命周期一样长,而不是取决于某个Activity的生命周期。如果想保持一个长期生命的对象,并且这个对象需要一个Context,就可以使用Application对象。可以通过调用Context.getApplicationContext()方法或者Activity.getApplication()方法来获得Application对象。依然拿上面的代码作为例子。可以将代码修改成下面的样子。

private static Resources mResources; 
@Override
protected void onCreate(Bundle state) {
super.onCreate(state);
if (mResources == null) {
    // mResources = this.getResources();
    mResources = this.getApplication().getResources();
    }
}

在这里将this.getResources()修改为this.getApplication().getResources()。修改以后,
Resources对象拥有的是Application对象的引用。如果Activity被重新创建,第一次创建的Activity就可以被回收了

你可能感兴趣的:(android-context 静态属性优化分享)