Android避免context相关内存溢出
16lz
2022-03-24
手机都有一定的内存限制,比如G1,只有16M的堆内存限制。作为手机开发者,在开发的时候,应该尽可能的节约内存。Android系统内存保存的应用越多,那么用户在使用时程序切换也就越快。其实,很多的内存溢出都有一个共同的特点,那就是,和Context相关的东西长期没有得到释放。
在Android上,一个Context用于很多操作,最多是用来加载和使用资源。这也是为什么很多widgets 都有一个Context参数的构造方法。Android应用中通常有两种Context,Activity
andApplication。通常程序员调用类和方法都用到第一个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.垃圾回收器不是对内存的保险。
更多相关文章
- Android(安卓)高手进阶教程(十三)之----Android(安卓)数据库SQLi
- Android中切换屏幕方向时Activity生命周期函数执行情况分析
- 在Android开发中怎样使用Application类
- 【阿里云镜像】切换阿里巴巴开源镜像站镜像——Fedora镜像
- 箭头函数的基础使用
- NPM 和webpack 的基础使用
- Python list sort方法的具体使用
- 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
- 【阿里云镜像】切换阿里巴巴开源镜像站镜像——Debian镜像