This Handler class should be static or leaks might occur Android (轉)


首先解釋下這句話This Handler class should be static or leaks might occur,大致意思就是說:Handler類應該定義成靜態類,否則可能導致內存泄露。

具體如何解決,在國外有人提出,如下:

Issue: Ensures that Handler classes do not hold on to a reference to an outer class

In Android, Handler classes should be static or leaks might occur. Messages enqueued on the application thread's MessageQueue also retain their target Handler. If the Handler is an inner class, its outer class will be retained as well. To avoid leaking the outer class, declare the Handler as a static nested class with a WeakReference to its outer class. 

大體翻譯如下:

Handler 類應該應該為static類型,否則有可能造成泄露。在程序消息隊列中排隊的消息保持了對目標Handler類的應用。如果Handler是個內部類,那 么它也會保持它所在的外部類的引用。為了避免泄露這個外部類,應該將Handler聲明為static嵌套類,並且使用對外部類的弱應用。

使用范例:

 

    static class MyHandler extends Handler {  
                    WeakReference<PopupActivity> mActivity;  
      
                    MyHandler(PopupActivity activity) {  
                            mActivity = new WeakReference<PopupActivity>(activity);  
                    }  
      
                    @Override  
                    public void handleMessage(Message msg) {  
                            PopupActivity theActivity = mActivity.get();  
                            switch (msg.what) {  
                            case 0:  
                                    theActivity.popPlay.setChecked(true);  
                                    break;  
                            }  
                    }  
            };  
      
            MyHandler ttsHandler = new MyHandler(this);  
            private Cursor mCursor;  
      
            private void test() {  
                    ttsHandler.sendEmptyMessage(0);  
            }  

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM