内存泄漏是指咱们在向程序申请了内存存储对象后,当该对象不须要用了的时候又不把内存释放还给程序,从而引起内存溢出(out of memory),下面例举一下可能形成内存泄漏的一些场景。web
static List<Object> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
Object o = new Object();
list.add(o);
}
复制代码
解决办法:数据库
将list清空,而且置为nullapi
list .clear();
list = null;
复制代码
private static Context mContext;
private void get(Context context) {
this.mContext = context;
}
复制代码
private static Context mContext;
private void get(Context context) {
this.mContext = context.getApplicationContext();
}
复制代码
2. 使用弱引用关联,当内存不足时,gc会将弱引用给回收缓存
private static WeakReference<Activity> mActivity;
private void get(Activity activity) {
this.mActivity = new WeakReference<Activity>(activity);
}
复制代码
private static test t=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_doc_main);
if (t == null) {
t = new test();
}
}
private class test{
private void test(){
}
}
复制代码
资源对象使用后未关闭 咱们平时在使用使用一些数据库,流,bitmap,广播等等时,咱们都须要在不须要用的时候及时的关闭,否则对象就会一直占着内存,没法回收掉,记住一个点,有开就有关bash
Handler消息传递 关于handler消息传递引起的内存泄漏有两个地方,第一,非静态内部类,第二,Handler持有外部对象的引用网络
mHandler.removeCallbacksAndMessages(null);
复制代码
if( mWebView!=null) {
ViewParent parent = mWebView.getParent();
if (parent != null) {
((ViewGroup) parent).removeView(mWebView);
}
mWebView.stopLoading();
mWebView.getSettings().setJavaScriptEnabled(false);
mWebView.clearHistory();
mWebView.clearView();
mWebView.removeAllViews();
mWebView.destroy();
}
复制代码
还有一些就是咱们平时要注意context的使用了,要注意他的使用场景与生命周期ide
Android的bitmap优化能够从四个方面入手优化