手机都有一定的内存限制,比如G1,只有16M的堆内存限制。作为手机开发者,在开发的时候,应该尽可能的节约内存。Android系统内存保存的应用越多,那么用户在使用时程序切换也就越快。其实,很多的内存溢出都有一个共同的特点,那就是,和Context相关的东西长期没有得到释放。

在Android上,一个Context用于很多操作,最多是用来加载和使用资源。这也是为什么很多widgets 都有一个Context参数的构造方法。Android应用中通常有两种Context,ActivityandApplication。通常程序员调用类和方法都用到第一个Context.

请看下面一段代码:

@Override

protected void onCreate(Bundle state) { super.onCreate(state);  TextView label = new TextView(this); label.setText("Leaks are bad");  setContentView(label);}

这里意味着views和整个activity都联系在一起了,那么当我们进行横竖屏切换时,默认情况的横竖屏切换会销毁

当前Activity并记住它的状态,然后系统会重新加载Activity至当前状态,如果你的应用里面含有很大的图片的话,那么它会

再次进行加载,这个时候最好的方法,就是使这个量成为一个静态变量:

private static Drawable sBackground; @Overrideprotected void onCreate(Bundle state) { super.onCreate(state);  TextView label = new TextView(this); label.setText("Leaks are bad");  if (sBackground == null) {  sBackground = getDrawable(R.drawable.large_bitmap); } label.setBackgroundDrawable(sBackground);  setContentView(label);}
  这段代码就会比较健壮了,当切换横竖屏的时候,图片就不会重新加载了。
  防止Context相关内存溢出有两个比较简单的方法,一种可以像上面这样,另外一种使用Application的Context.
  总结:
      1.Activity的变量应该和该Activty有一样的生命周期
      2.试着使用Application的Context
      3.避免在Activity中使用非静态类,如果你不控制该类的生命周期的话。可以创建一个静态内部类,并且在
        Activity里使用一些weak reference ,这个观点的解决办法就是在外部类中使用WeakReference管理    类。
  4.垃圾回收器不是对内存的保险。

更多相关文章

  1. Android(安卓)高手进阶教程(十三)之----Android(安卓)数据库SQLi
  2. Android中切换屏幕方向时Activity生命周期函数执行情况分析
  3. 在Android开发中怎样使用Application类
  4. 【阿里云镜像】切换阿里巴巴开源镜像站镜像——Fedora镜像
  5. 箭头函数的基础使用
  6. NPM 和webpack 的基础使用
  7. Python list sort方法的具体使用
  8. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  9. 【阿里云镜像】切换阿里巴巴开源镜像站镜像——Debian镜像

随机推荐

  1. android点滴5
  2. Android(安卓)ListView 长按列表弹出菜单
  3. stagefright
  4. Android(安卓)自定义标题栏Title Bar
  5. [Android(安卓)Studio]使用AS开发Android
  6. android 来电自动接听和自动挂断
  7. Android(安卓)(一) Android(安卓)studio 安
  8. Android之OnGestureListener实现图片的左
  9. Android消息处理机制2——Message
  10. Android获取、设置桌面