我对此感到困惑。刚开始使用 android 并且有一个很长的表单,需要多个活动来组合一个对象。我想将对象从一个活动传递到另一个活动来构建它。在阅读了许多帖子和博客以及 Android Dev 页面之后,似乎对于非持久数据,最好的选择是子类化应用程序或创建单例。我查看了这篇文章openFileOutput 在单例类中无法正常工作 - 想法/解决方法?现在我的问题是,为什么单身人士没有被回收? 如果我们在 Activity A 中 createSingleton() ,然后移动到 Activity B 并且我们永远不会传递对单例的引用,那么垃圾回收器如何知道我们将再次回到它?在我看来,当活动 A 被回收并且我们已经转移到活动 B 时,单身人士将会死去。
如果我们看下面的单例..
public final class SomeSingleton implements Cloneable {
private static final String TAG = "SomeSingleton";
private static SomeSingleton someSingleton ;
private static Context mContext;
/**
* I'm private because I'm a singleton, call getInstance()
* @param context
*/
private SomeSingleton(){
// Empty
}
public static synchronized SomeSingleton getInstance(Context context){
if(someSingleton == null){
someSingleton = new SomeSingleton();
}
mContext = context.getApplicationContext();
return someSingleton;
}
public void playSomething(){
// Do whatever
mContext.openFileOutput("somefile", MODE_PRIVATE); // etc...
}
public Object clone() throws CloneNotSupportedException {
throw new CloneNotSupportedException("I'm a singleton!");
}
}
我们通过 getInstance() 创建它的一个实例,该类将该类的单个实例放入静态字段 someSingleton 中。为什么这个实例永远不会被回收?如果答案是,“静态字段永远不会被回收?” 如果我们有很多内存,是什么阻止我们用完所有的内存?简单的设计考虑?如果我们使用大量贡献的库,而我们不知道有多少静态字段,这似乎是有风险的。我只是有一种感觉,作为新手,我在 OOP 中缺少一些基本规则。