软件测试布道师的江湖

深耕软件测试领域,定期分享技术干货,一起成长!

Android性能优化笔记

1、加载和读取图片

     首先Android系统对每个软件所能使用的RAM空间进行了限制,这样做的目的就是为了更加合理的来利用内存,毕竟Android开发采用的是java语言,而java语言自身就是比较消耗内存的。

     当在Android设备上面读取4M的图片时就有可能出现OOM,这个是我们不能控制的,但是我们可以采取一些措施来减少这种情况的发生:

      (1) 读取图片,根据需要的尺寸加载bitmap

           首先读取图片之前先查看其大小      

 1            BitmapFactory.Options opts = new BitmapFactory.Options();
 2 
 3            opts.inJustDecodeBounds = true;  //这样能保证不用给原始图片的大小分配内存
 4 
 5            Bitmap bitmap = BitmapFactory.decodeFile(imageFile,opts);
 6 
 7            使用得到的图片原始宽高计算适合自己的sampleSize
 8 
 9            BitmapFactory.Options opts = new BitmapFactory.Options();
10 
11            opts.inSampleSize = 4;  //假定我们需要的尺寸
12 
13            Bitmap bitmap = BitmapFactory.decodeFile(imageFile,opts);

           当然这只是非常简单的一种使用图片应该考虑的方式。

       (2) 使用完图片以后要记得去释放Bitmap对象

             

1              bitmap.recycle();
2 
3              bitmap = null;

 

2、减少逻辑代码工作量

     逻辑过于复杂一来不利于别人读懂,而来一定程度会降低效率,并且埋下未知的隐患。

1  class MyActivity extends Activity{
2 
3       public void myClickhandler(View v){
4 
5       //to do something
6 
7       }
8 
9      }

       在Layout.xml文件中加入:<Button  android:onClick=”myClickHandler” />

        就不用在代码中新建OnClickListener

  3、去掉不必要的View

1  <resource>
2 
3             <style name=”Theme.NoBackground” parent=”android:Theme”>
4 
5              <item name=”android:windowBackground”>@null</item>
6 
7              </style>
8 
9       </resource>

       或者在Manifest.xml的activity或Application中添加android:theme=”@style/Theme.NoBackground”

   4、代码级内存优化

        (1)Android提供了很健全的消息传递机制(intent)和任务模型(Handler) 可以通过传递或事件的方式,

             防止一些不必要的全局变量。

        (2)对于很多必不可少的全局引用,如果不是随时需要或者必不可少,则可以使用SoftRerence或者WeakRerence

            引用他们,可以保证在系统内存不足的时候,他们会首先释放而不是出现OOM

        (3)如果有牵扯到大量对象或者组合数据的算法操作,则最好使用C语言封装这些对象并进行操作,通过jni调用至于

            java语言进行最简单的数据通信,因为即使空的java对象也会占据20多个字节。

posted @ 2012-11-13 14:20  布道师玄柯  阅读(459)  评论(0编辑  收藏  举报