Application Context和單例模式


Google不推薦我們使用自定義的Application,基本上只有需要做一些全局初始化的時候才可能需要用到自定義Application。但多數項目只是把自定義Application當成了一個通用工具類,雖然沒什么副作用但使用單例模式實現可能更加優雅。

 

但是把自定義Application和單例模式混合到一起使用,那就大錯特錯了。一個非常典型的例子如下所示:

public class MyApplication extends Application {  
    private static MyApplication app;  
    public static MyApplication getInstance() {  
        if (app == null) {  
            app = new MyApplication();  
        }  
        return app;  
    }   
}  

因為我們知道Application是屬於系統組件,系統組件的實例是要由系統來去創建的,如果這里我們自己去new一個MyApplication的實例,它就只是一個普通的Java對象而已,而不具備任何Context的能力。我們只需謹記一點,Application全局只有一個,它本身就已經是單例了,無需再用單例模式去為它做多重實例保護了,正確代碼如下所示:

public class MyApplication extends Application {  
    private static MyApplication app;  
    // getInstance()方法里面不需要任何邏輯判斷,直接返回app對象就可以了
    public static MyApplication getInstance() {  
        return app;  
    }  
    @Override  
    public void onCreate() {  
        super.onCreate();  
       //this就是當前Application的實例,那么app也就是當前Application的實例了
        app = this;  
    }  
}  

 


免責聲明!

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



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