安卓开发优化Android知识Android开发

Android 内存管理与优化

2016-09-06  本文已影响1089人  KaelQ

1.Android 内存基础

2.Android 问题与调节

3.Android默认内存回收机制——垃圾回收GC(Garbage Collection)

4.优化——减少额外的内存使用

4.1 Bitmap

基本思路:缩略图,像素,图片回收,捕获OOM异常

// 先判断是否已经回收  
if(bitmap != null && !bitmap.isRecycled()){  
    // 回收并且置为null  
    bitmap.recycle();  
    bitmap = null;  
}  
System.gc();  
Bitmap bitmap = null;  
try {  
    // 实例化Bitmap  
    bitmap = BitmapFactory.decodeFile(path);  
} catch (OutOfMemoryError e) {  
    // 捕获OutOfMemoryError,避免直接崩溃  
}  
if (bitmap == null) {  
    // 如果实例化失败 返回默认的Bitmap对象  
    return defaultBitmapMap;  
}  

4.2 软引用和弱引用

软件用和弱引用的概念解释

4.3 小Tips

for(int i=0;i<a.length;i++)//访问成员变量,会慢很多。
for(int i=0;i<a.length();i++)//调用方法,也会慢很多。

正确的做法如下:

int b = a.length/int b=a.length();
for(int i=0;i<b;i++)//这样循环体最快。

java还有一种访问数组的方法,这种方法比普通循环多出4个字节,因为产生了一个额外的变量,如下列的a。

for(Foo a:Array){
    m+=a.value;
}

5.优化—— 重复使用内存资源

6.优化——回收不需要的内存

Thread t = new Thread() {  
    public void run() {  
        while (true) {  
            try {  
                Thread.sleep(1000);  
                System.out.println("thread is running...");  
            } catch (InterruptedException e) {             
            }  
        }  
    }  
};  
t.start();  
t = null;  
System.gc();  

这个时候GC并不会回收这个线程,因为正在运行的线程属于GCRoot的一种,并不会被GC进行回收。

Cursor cursor = null;  
try {  
    cursor = mContext.getContentResolver().query(uri,null, null,null,null);  
    if(cursor != null) {  
        cursor.moveToFirst();  
    }  
} catch (Exception e) {  
    e.printStackTrace();  
} finally {  
    if (cursor != null) {  
        cursor.close();  
    }  
}  

:在CursorAdapter中应用时,我们不能直接关掉Cursor,而且CursorAdapter在Acivity结束时并没有自动的将Cursor关闭掉,因此,需要在onDestroy函数中,手动关闭。

@Override    
protected void onDestroy() {          
    if (mAdapter != null && mAdapter.getCurosr() != null) {    
        mAdapter.getCursor().close();    
    }    
    super.onDestroy();     
}    
@Override    
protected void onDestroy() {    
      this.unregisterReceiver(receiver);    
      super.onDestroy();    
}    

7.优化——视图布局优化

上一篇 下一篇

猜你喜欢

热点阅读