因為單例的靜態特性使得其生命周期和應用程序壹樣長,如果使用不當很容易造成內存泄漏。例如,這裏有壹個典型的例子。
這是壹個普通的單例模式。創建這個單體時,因為需要傳入壹個上下文,所以這個上下文的生命周期非常重要:
1.如果此時傳入應用程序的上下文,就不會有問題,因為應用程序的生命周期就是整個應用程序的生命周期。
2.如果此時傳入Activity的上下文,當這個上下文對應的Activity退出時,由於這個上下文的引用被singleton對象持有,其生命周期等於整個應用程序的生命周期,所以當前Activity退出時其內存不會被回收,這樣就會造成泄漏。
正確的方式應該改為以下方式:
或者這樣寫,連上下文都不壹定要傳進去:
向應用程序添加壹個靜態方法,getContext()返回應用程序的上下文。