gpt4 book ai didi

Android应用程序生命周期和单例

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:31:38 25 4
gpt4 key购买 nike

我们大多数人都熟悉这种模式:

   public class MySingeltone {

public String mSomeReferenceTypeData;
public int mSomeValueTypeData;

private static MySingeltone mInstance;

private MySingeltone() {

}

public static MySingeltone getInstance() {
if (mInstance == null) {
mInstance = new MySingeltone();
}

return mInstance;
}
}

我的问题是我最近发现在使用他的 Activity 被销毁后,或者当整个应用程序假设为子句时,mInstance 不等于 null,例如:

public class SomeActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

MySingeltone mySingeltone = MySingeltone.getInstance();
mySingeltone.mSomeReferenceTypeData = "some value";
}
}

在关闭所有正在运行的应用程序 Activity 后(比如 10 秒后...)下一次启动“SomeActivity”时,mInstance 仍然持有相同的引用,在其字段上具有相同的值。

为什么会这样?

我错过了什么?

当android垃圾收集静态成员属于应用程序时?

最佳答案

因为“mInstance”是一个静态变量,当您关闭您的应用程序时它不会为空。关闭应用程序并不意味着您的应用程序已被销毁。

也没有关闭您的 Android 应用程序的概念。如果您退出您的应用程序,它不会同时被销毁。 Android 操作系统在内部处理何时关闭不再使用的应用程序。如果 android 决定销毁应用程序时内存不足,则此静态变量也将变为 null。

关于Android应用程序生命周期和单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10761488/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com