前言
程序写多了你会不知不觉地再使用模式,虽然你知道或者不知道,但模式一直都隐藏在各个角落里。经常会在代码里出现这样一类东西,程序的生命周期里面只会存在唯一的一个对象,这个时候我们经常会使用Singleton(单例)的模式(不要和我说你不知道这是啥,不知道自己Google去吧),这样可以保证程序里只会存在一个对象。这看起来很正常的用法却在Android里面稍微有些不同
问题
起初,我在Android里面使用Singleton对象的时候,根本没多想。起初以为在程序退出的时候,Singleton对象会被系统Destroy掉,但是结果并不是这样子的。在我无意之中发现当程序退出以后,我再重新打开的时候,我的Singleton对象没有被系统Destroy掉,而是保留了下来。于此同时我在StackOverflow上也找到具有相同的问题。上面有提到Java的垃圾回收问题,有人回复说Java的垃圾回收仅仅是在一个对象的引用归零时结束,等等。于是,我去新建一个Java工程去测试。发现并不会出现这个问题。可是在Android里面确实会出现Singleton对象在程序退出后无法被Destroy的问题。
解决方法
StackOverflow上讨论出的解决方法是在Singleton对象里增加open()/close()/isOpened()方法,我表示不太理解他的解决方法,估计是检查状态吧。那我的思路是很简单,每次获取Singleton实例以后都去对这个对象复位一下。如果你有什么新发现,可以在下面留言!
程序写多了你会不知不觉地再使用模式,虽然你知道或者不知道,但模式一直都隐藏在各个角落里。经常会在代码里出现这样一类东西,程序的生命周期里面只会存在唯一的一个对象,这个时候我们经常会使用Singleton(单例)的模式(不要和我说你不知道这是啥,不知道自己Google去吧),这样可以保证程序里只会存在一个对象。这看起来很正常的用法却在Android里面稍微有些不同
问题
起初,我在Android里面使用Singleton对象的时候,根本没多想。起初以为在程序退出的时候,Singleton对象会被系统Destroy掉,但是结果并不是这样子的。在我无意之中发现当程序退出以后,我再重新打开的时候,我的Singleton对象没有被系统Destroy掉,而是保留了下来。于此同时我在StackOverflow上也找到具有相同的问题。上面有提到Java的垃圾回收问题,有人回复说Java的垃圾回收仅仅是在一个对象的引用归零时结束,等等。于是,我去新建一个Java工程去测试。发现并不会出现这个问题。可是在Android里面确实会出现Singleton对象在程序退出后无法被Destroy的问题。
解决方法
StackOverflow上讨论出的解决方法是在Singleton对象里增加open()/close()/isOpened()方法,我表示不太理解他的解决方法,估计是检查状态吧。那我的思路是很简单,每次获取Singleton实例以后都去对这个对象复位一下。如果你有什么新发现,可以在下面留言!