zoukankan      html  css  js  c++  java
  • 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多个字节。

  • 相关阅读:
    python3----数据结构
    Java的同步容器和并发容器
    Java基础——IO
    JVM(2)——GC算法和收集器
    Java集合(2)——深入理解ArrayList、Vector和LinkedList
    java线程(7)——阻塞队列BlockingQueue
    JVM(1)——简介
    java泛型——基本使用
    java线程(6)——线程池(下)
    java线程(5)——线程池(上)
  • 原文地址:https://www.cnblogs.com/zhouliweiblog/p/2767951.html
Copyright © 2011-2022 走看看