如果我有这样的代码:
public class MyActivity extends Activity
{
private SingletonClass singletonInstance;
...
@Override
protected void onCreate(Bundle savedInstanceState)
{
singletonInstance = SingletonClass.getInstance();
}
...
}
我的理解是,Activity 将保持活动状态,因为它引用了静态实例,因此无法被 GC 回收。然而,它似乎并没有给我的应用程序带来任何问题。我是否不理解 GC 或者这真的会泄漏内存,我应该避免保留对我的单例类的引用吗?
研究了你的疑问,我确认我的答案:
如果您将 singletonInstance 声明为静态,就会发生这种情况。对于您的 Activity,singletonInstance 只是 SingletonClass 的一个实例。请记住,不存在“静态实例”之类的东西,该实例只是给定类的一个对象,使其成为静态的是您在作用域中声明它的方式。对于 MyActivity,singletonInstance 不是静态的,即使在 SingletonClass 中您引用相同的对象/实例并且它被声明为静态。
这样,您的 Activity 就可以被 GC 清理而不会出现问题。我在 Android 上有一个类似的实现,它涉及一个服务,它已经运行了数百小时,没有任何内存或性能问题......
Regards
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)