android 程序内存优化,常见的内存泄漏

都知道jvm垃圾回收器并不是万能的,一些错误的操作也会给回收造成困难,
以下只是列出例子如果有相同场景、模式对号入座优化

1.强引用和弱引用

adapter加载数据是不可控的,在很多时候加载listView的列表的时候每个子列表都要重新new一个view界面用于显示这样是很耗费内存的,这样重复利用可以减少滑动时的内存消耗(如果每一行显示不一样可以在adapter中创建成员变量重复使用)

 public View getView(final int position, View convertView , ViewGroup parent){
        View view;
        //根据R资源id获取到界面显示控件
        if (convertView == null) {
            //根据R资源id获取到界面显示控件
            view  = LayoutInflater.from(getContext()).inflate(resourceId, null);
        } else {
            view =  convertView;
        }
}

2.强引用和弱引用

很多的控件需要context和activity,当一些类需要传入时基本上都是构造方法或者set方法
WeakReference 弱引用 = new WeakReference(变量);
这种方式当传入的变量被制空的时候此变量会跟着被回收,不然普通的set和构造方法会一直带着引用

3.android 程序的图标

在程序中或多或少的会有很多的图标显示,请注意是否有图标大小分辨率过大或过小影响性能和体验度
L DPI ( Low Density Screen,120 DPI ),其图标大小为 36 x 36 px
M DPI ( Medium Density Screen, 160 DPI ),其图标大小为 48 x 48 px
H DPI ( High Density Screen, 240 DPI ),其图标大小为 72 x 72 px
XH DPI ( Extra-high density screen, 320 DPI ),其图标大小为 96 x 96 px
XXH DPI( xx-high density screen, 480 DPI ),其图标大小为144 x 144 px
XXXH DPI( xxx-high density screen, 640 DPI ),其图标大小为192 x 192 px

4.懒加载

这是我自己喜欢的一种方式对于内存泄漏没多大用处,但对于activity跳转返回桌面或者白屏有奇效
在每个activity或者fragment中页面初始化有很多内容要加载会造成页面白屏时间长,部分手机设定了背景透明还会返回桌面之后再弹出来下一个活动界面
为了防止部分手机返回桌面只能在style中设置属性
<item name="android:windowIsTranslucent">true</item>
但这样我用一些手机测试的时候切换界面会出现返回桌面再弹出来的情况,设置成false则出现加载页面会有一段时间白屏,这种情况我使用了懒加载的方式写一个内部类继承线程然后在handler中延迟启动,大致的意思是先立马初始化了界面然后再去绑定监听和加载页面里的的内容,这样界面现实的快然后内容一点一点加入用户比较能接受。

Handler handler = new Handler();
//100是毫秒,只要让界面先加载出来再去填写内容即可不要设过大
handler.postDelayed(new delayThread(), 100);
//内部类
class delayThread implements Runnable {
    public void run() {
    //在这里写业务代码
    }
}

猜你喜欢

转载自blog.csdn.net/zhaohan___/article/details/85286394