zoukankan      html  css  js  c++  java
  • Android性能优化

    1.http用gzip压缩,设置连接超时时间和响应超时时间

    http请求按照业务需求,分为是否可以缓存和不可缓存,那么在无网络的环境中,仍然通过缓存的httpresponse浏览部分数据,实现离线阅读。

    2.listview 性能优化

    1).复用convertView

    在getItemView中,判断convertView是否为空,如果不为空,可复用。如果couvertview中的view需要添加listerner,代码一定要在if(convertView==null){}之外。

    2).异步加载图片

    item中如果包含有webimage,那么最好异步加载

    3).快速滑动时不显示图片

    当快速滑动列表时(SCROLL_STATE_FLING),item中的图片或获取需要消耗资源的view,可以不显示出来;而处于其他两种状态(SCROLL_STATE_IDLE 和SCROLL_STATE_TOUCH_SCROLL),则将那些view显示出来

    3.使用线程池,分为核心线程池和普通线程池,下载图片等耗时任务放置在普通线程池,避免耗时任务阻塞线程池后,导致所有异步任务都必须等待

    4.异步任务,分为核心任务和普通任务,只有核心任务中出现的系统级错误才会报错,异步任务的ui操作需要判断原activity是否处于激活状态

    5.尽量避免static成员变量引用资源耗费过多的实例,比如Context

    6.使用WeakReference代替强引用,弱引用可以让您保持对对象的引用,同时允许GC在必要时释放对象,回收内存。对于那些创建便宜但耗费大量内存的对象,即希望保持该对象,又要在应用程序需要时使用,同时希望GC必要时回收时,可以考虑使用弱引用。

    7.超级大胖子Bitmap

    及时的销毁(Activity的onDestroy时,将bitmap回收)

    设置一定的采样率

    巧妙的运用软引用

    drawable对应resid的资源,bitmap对应其他资源

    8.保证Cursor 占用的内存被及时的释放掉,而不是等待GC来处理。并且 Android明显是倾向于编 程者手动的将Cursor close掉

    9.线程也是造成内存泄露的一个重要的源头。线程产生内存泄露的主要原因在于线程 生命周期的不可控

    10.如果ImageView的图片是来自网络,进行异步加载

    11.应用开发中自定义View的时候,交互部分,千万不要写成线程不断刷新界面显示,而是根据TouchListener事件主动触发界面的更新
     
     
     
    ----------------------------------------------------------------------------------------------------------------------------
     
     一、慎用Logcat输出
      如果你的应用总是在后台不断的输出Log.i或Log.d的内容,除了增加系统开销外,对你应用的整体效率受影响,尤其是持续输出很多内容。由于Log需要底层的JNI调用,对Java虚拟机的开销来说还是不小的。
      二、ProGuard扰码器
      对于Android应用加密,扰码器可能除了修改类和变量的名称外,增加算法复杂难度,可能出现本身1+1=2的问题变为了2*10-10-8这样的情况,当然Android是举个例子来说明扰码器的工作原理,这对于程序的运行效率和部分逻辑可能会改变,所以这点要权衡配置扰码器是否仅修改变量名称。
      三、基础知识
      1. 访问变量比访问一个类的字段要快/
      2. 同时判断数组为空一般不用getCount()==0这样的方法,直接通过isEmpty()这样的方法来处理
      3. 很多情况下慎用全局的静态类。
      4. Android应用执行起来很多的CPU占用都是出在JVM资源是放上,所以如果尽可能的减少内存的释放,或增加手机的RAM对程序的执行效率会很有帮助。
      5. 尽量少的注册系统广播通知接收,同时适当的可以通过重写onPause或onResume来控制Activity显示时才获取部分系统广播。
     
     
     
     
    --------------------------------------------------------------------------------------------

    1.     采用硬件加速,在androidmanifest.xml中application添加  android:hardwareAccelerated="true"。不过这个需要在android 3.0才可以使用。

    2.     View中设置缓存属性.setDrawingCache为true.

    3.      优化你的布局。通过Android sdk中tools目录下的layoutopt 命令查看你的布局是否需要优化。

    4.      动态加载View. 采用ViewStub 避免一些不经常的视图长期握住引用.

    5.      将Acitivity 中的Window 的背景图设置为空。getWindow().setBackgroundDrawable(null);android的默认背景是不是为空。

    6.      采用<merge> 优化布局层数。 采用<include >来共享布局。

    7.      查看Heap 的大小

    8.      利用TraceView查看跟踪函数调用。有的放矢的优化。

    9.      cursor 的使用。不过要注意管理好cursor,不要每次打开关闭cursor.因为打开关闭Cursor非常耗时。 Cursor.require用于刷新cursor.

    10.      采用环形Buffer(可以采用链表数据结构实现)。可以设置一个链表长度的上限,根据手势的变化来不断地更新环形Buffer的内容。

    11.      采用SurfaceView在子线程刷新UI, 避免手势的处理和绘制在同一UI线程(普通View都这样做)。

    12.      采用JNI,将耗时间的处理放到c/c++层来处理。

    13.      有些能用文件操作的,尽量采用文件操作,文件操作的速度比数据库的操作要快10倍左右。

    14.      懒加载和缓存机制。访问网络的耗时操作启动一个新线程来做,而不要再UI线程来做。

  • 相关阅读:
    Vim基本功
    八个最常用的正则表达式
    程序员总结:帮助你早些明白一些道理
    HttpClient
    Red.Hat.Enterprise.Linux.6.2下安装vim 、OpenOffice、JDK、Eclipse
    输出打印某个对象所有属性及属性值
    Notepad++
    写博客?
    解决操作WordPress时提示输入FTP信息
    JS通过键盘点击事件实现div移动
  • 原文地址:https://www.cnblogs.com/zgz345/p/3232081.html
Copyright © 2011-2022 走看看