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多个字节。