內存泄漏是指咱們在向程序申請了內存存儲對象後,當該對象不須要用了的時候又不把內存釋放還給程序,從而引起內存溢出(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優化能夠從四個方面入手優化