android的内存优化对于大型的android项目来说,十分重要!今天就选几个常见的列举一下


1. Context的引用

在Activity和Fragment之外,使用Context的时候,尽量使用Application Context,在AndroidAnnotations中,也即是:

@RootContextContext context;

原因:应用的Context的生命周期很长,它与我们的app共存亡;我们尽量不要去hold Activity的Context,因为它的生命周期较短,否者,可能出现,Activity退出后,其Context依然被EBean的对象所持有。


2.Bitmap

Bitmap是android占用内存的大户,我们需要注意:

2.1 不在需要的Bitmap,要及时调用recycle()进行销毁。

2.2 设当的时候,使用Bitmap的时候,可以设置一定的采样率


3.Cursor

我们在读取第三方应用或者系统的ContentProvider的时候,通常会通过调用getContentResolver()的增删改查方法,获得Cursor对象,然后进行操作。操作完成后,务必要记得关掉!


4.ListView和GridView

ListView和GridView要进行View的复用,不懂复用的程序员,不是合格的android程序员。


5.自定义控件

我们自己经常通过View或者SurfaceView自定义自己的控件,通常会使用一个Thread,定期的去绘制,View通常使用postInvalidate()和onDraw()方法配合等等,注意:我们Override它的onDetachWindow方法的时候,要记得及时停止线程的绘制和资源的释放,特别是一些图片资源。


6.BroadcastReceiver一定要检查register和unregister的成对出现。


7.Handler使用的时候,要声明为static


8.我们在单例模式下的内中的java 容器,如List,Queue,Stack,Map等,在适当的时候,要及时调用clear方法,因为,如果这些容器依然保留那些不再适用的对象的引用,JVM会认为该对象依然被引用,不会得到释放,如果运用不恰当,会出现内存泄露。


..............................

内存的分析工具:

1.Eclipse中,打开DDMS视图,选中我们应用的包名,我们可以Dump出我们应用的内存占用情况

2.Eclipse的第三上插件MAT(内存分析工具)

3.adb命令

我们可以通过如下步骤:

a). adb shell

adb进入手机

b). ps

查看所有的进程和包名,注意,我们需要查看,我们的应用对用的包名和pid(进程ID)

c). dumpsys meminfo <应用对用的pid>

通过该命令来查看内存的占用情况。

如下图是chrome浏览器的内存占用情况:


我们可以不断的通过操作我们的应用,实时查看内存的占用情况,以定位问题。


未经允许不得用于商业目的

欢迎加入QQ群讨论:android开发联盟:272209595



更多相关文章

  1. android中图形图像处理之drawable用法分析
  2. Android文件、内存、SDCard管理常用工具类、方法
  3. Android(安卓)GreenDao数据库—基础详解
  4. dalvik.vm 属性与android:largeHeap
  5. Android(安卓)Content Provider Guides
  6. Android(安卓)NDK c创建java对象
  7. Android(安卓)9.0 SIM卡初始化流程
  8. 不同Activity之间传递数据--Bundle对象和startActivityForResult
  9. Android开发之屏幕元素层次结构

随机推荐

  1. android 读取json数据(遍历JSONObject和JS
  2. Android(安卓)时间滚动控件
  3. Android(安卓)N 7.0中报错:android.os.Fil
  4. 你百度不到的android坑 imageview.setima
  5. Android(安卓)Wifi P2P 入门
  6. cocos2dx调用android的说明很多,我直接给
  7. android开发,你还在犹豫什么呢?进来看看花
  8. android 自定义Dialog背景透明及显示位置
  9. Android访问WCF服务
  10. android 电量