【新姿勢】內存泄漏,內存溢出,靜態Handler類

創建了一個對象,用完之後如果沒有讓回收機制回收,那麼就是內存泄漏 (memory leak),由於一直佔用着內存,長期的內存泄漏就是導致內存溢出(out of memory )
所以繼承Handler的內部類一定要是靜態的,並且對所在的activity弱引用,這樣引用的外部類才能被回收

爲什麼要設計成靜態的內部類呢?
因爲靜態內部類不能訪問外部類的非靜態成員,這樣就避免了對外部類的強引用,斷開了和外部類的聯繫,這樣外部類就能回收了,但實際上handler類有可能會用到外部類的成員,所有就設計成靜態內部類,並對外部類對象弱引用,需要外部成員,就通過弱引用的外部類對象調用

static class MyHandler extends Handler {

                WeakReference mActivity;



                MyHandler(PopupActivity activity) {

                        mActivity = new WeakReference(activity);

                }



                @Override

                public void handleMessage(Message msg) {

                        PopupActivity theActivity = mActivity.get();

                        switch (msg.what) {

                        case 0:

                                theActivity.popPlay.setChecked(true);

                                break;

                        }

                }

        };
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章