1. 程式人生 > >android--弱引用來預防記憶體洩露

android--弱引用來預防記憶體洩露

是否我們經常寫的程式碼無緣無故的提示我們記憶體洩露,或者是程式跑著跑著就掛了,其實這和我們寫的程式碼風格有關,以及寫的程式碼不規範,我們經常的更新UI操作,一般都是在Handler進行,但是我們一般沒有使用靜態static關鍵字修飾,以及沒有設定持有弱引用,導致,可能我們的activity已經destory了,但是,我們的Handler卻沒有關閉,這樣就可能會導致記憶體洩露.

———–不規範寫法————–
定義內部Handler類…

final Handler mHandler = new Handler{
    public void handleMessage(android.os.Message msg) {
            switch
(msg.what){ case 1001: //更新主介面UI操作 //如:更新介面卡等... break; }

其他地方呼叫:
如:

new Thread(){
        public void run() {
            Message msg = Message.obtain();
            msg.what = 1001;
            msg.obj = plan;                         mHandler.sendMessage(msg);
                    };
            }.start();

———–嚴謹的寫法———–
1 靜態內部類,持有View物件的弱引用,方便JVM優先GC掉MyHandler物件…預防記憶體洩露…

static class MyHandler extends Handler{
        SoftReference<TestHandler>mTestReference;//持有當前檢視的弱引用...
        public MyHandler(TestHandler t) {
            mTestReference = new SoftReference<TestHandler>(t);
        }
        @Override
        public
void handleMessage(Message msg) { TestHandler test = mTestReference.get(); switch(msg.what) { case 1001: //更新UI操作 break; } } }

2 呼叫..

new Thread(){
            public void run() {
                MyHandler myHandler = new MyHandler(TestHandler.this);
                Message msg = Message.obtain();
                msg.what = 1001;
                myHandler.sendMessage(msg);
            };
        }.start();

自己做個筆記,歡迎交流…