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

  • 相关阅读:
    centos7 svn服务器的搭建
    fastdfs远程服务器java连接失败的问题
    Java实现视频网站的视频上传、视频转码、视频关键帧抽图, 及视频播放功能
    数据库访问辅助类SqlHelper
    实现基本的Ajax和Json请求
    在Asp.Net MVC中使用Repeater控件
    Asp.Net MVC向视图View传值的三种方法
    C#实现加简单的Http请求
    Http协议学习小结
    iOS开发之layoutSubviews
  • 原文地址:https://www.cnblogs.com/zhouliweiblog/p/2767951.html
Copyright © 2011-2022 走看看