0
点赞
收藏
分享

微信扫一扫

Andoird优化(二)_内存优化_点进来看看不会后悔的

大概会花一个月左右的时间出7-8个专题来分享一下在工作和学习中积累下来的Android性能优化经验
希望大家会持续关注。

现在是专题二:内存优化

但这也仅仅是为大家提供一些思路与较为全面的总结,算不上什么,希望有错误或问题在下面评论。

最后完结以后会将思维导图与优化框架整理出来,请期待。
如果程序会运行着崩溃、或者突然被系统杀死,那你就该继续往下看。

这是这章的思维导图,不过压缩严重,下面是样图,原图和源文件在最下方链接。还是值得下载的。

题记


一、谈谈移动设备中的内存


二、采用合适的数据类型

总的来说,
就是:


三、你需要知道的访问内存

  • 一级缓存
  • 二级缓存
  • 三级缓存(一般用于服务器机或游戏机器)

四、通过垃圾收集管理内存


五、通过Java中的引用来更好的管理


六、通过系统的API可以了解、管理内存


七、当内存少的时候可以这样处理

八、通过5R法来对ANDROID内存进行优化:

1.Reckon(计算)

2.Reduce(减少)

Reduce的意思就是减少,直接减少内存的使用是最有效的优化方式。

图片显示:

图片大小:

BitmapFactory.Options bitmapFactoryOptions = new BitmapFactory.Options();  
 bitmapFactoryOptions.inJustDecodeBounds = true;  
 bitmapFactoryOptions.inSampleSize = 2;  
 // 这里一定要将其设置回false,因为之前我们将其设置成了true    
 // 设置inJustDecodeBounds为true后,decodeFile并不分配空间,即,BitmapFactory解码出来的Bitmap为Null,但可计算出原始图片的长度和宽度    
 options.inJustDecodeBounds = false;  
 Bitmap bmp = BitmapFactory.decodeFile(sourceBitmap, options);  

图片像素

public static BitmapreadBitMap(Contextcontext, intresId) {  
     BitmapFactory.Optionsopt = newBitmapFactory.Options();  
     opt.inPreferredConfig = Bitmap.Config.RGB_565;  
     opt.inPurgeable = true;  
     opt.inInputShareable = true;  
     //获取资源图片   
     InputStream is = context.getResources().openRawResource(resId);  
     return BitmapFactory.decodeStream(is, null, opt);  
 } 

bitmap.recycle();  
  bitmap = null;  

捕获异常:

Bitmap bitmap = null;  
 try {  
    // 实例化Bitmap  
    bitmap = BitmapFactory.decodeFile(path);  
 } catch (OutOfMemoryError e) {  
     // 捕获OutOfMemoryError,避免直接崩溃  
}  
 if (bitmap == null) {  
     // 如果实例化失败 返回默认的Bitmap对象  
     return defaultBitmapMap;  
 } 


修改引用

3.Reuse(重用)

4.Recycle(回收)

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();  

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


5.Review(检查)

Code Review(代码检查):

UI Review(视图检查):


总结:

链接点下方,如果不能用及时留言,莫名被删过
链接:http://pan.baidu.com/s/1hsK2Co0 密码:abcs

举报

相关推荐

0 条评论