gpt4 book ai didi

android - 清除静态数据 onDestroy()

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:36:58 26 4
gpt4 key购买 nike

在我的应用程序中有一个类,我在其中声明了一些 static 变量。问题是当应用程序被销毁时,所有变量的值都没有重置。
有什么方法可以在应用程序被销毁时重置所有静态变量的值,除非在 onDestroy() 中单独重置它们?

最佳答案

class MySettings {
// final can't be changed
public static final String CONSTANT = "ucantchangeme";

// static - all Objects have just these - even different Acitivities etc
public static String sUserName;

// class instance members - each Object you create with new has its own version
public String mUserName;

public MySettings() {
mUserName = "uninitialized";
}

public static void init() {
sUserName = "Peter";
}

public static void reset() {
sUserName = null;
}
}

/* Your Activity */
class MyActivity extends Actitivy {
private MySettings mSettings;
private MySettings mOtherSettings;

onCreate() {
// init those static parts of MySettings
MySettings.init();

mSettings = new mSettings();
mSettings.mUserName = "Peter"
Log.d("TAG", "Username: " + mSettings.mUserName);
// prints Peter

// this could also be another Activity
mOtherSettings = new MySettings();
Log.d("TAG", "Username: " + mOtherSettings.mUserName);
// prints "uninitialized"

MySettings.sUserName = "Jim";
Log.d("TAG", "Username: " + MySettings.sUserName);
// prints "Jim"

mSettings.sUserName = "Joe";
Log.d("TAG", "Username: " + MySettings.sUserName);
Log.d("TAG", "Username: " + mSettings.sUserName);
Log.d("TAG", "Username: " + mOtherSettings.sUserName);
// all print "Joe" now
}

onDestroy() {
// clear MySettings
MySettings.reset();
}
}

您可以将静态变量重置为 null 或您想要的任何值,但是将静态变量用于其他事物然后常量通常不是一个好主意 - 它通常是糟糕的类设计并且可能导致意外行为,例如你观察到的一个。

只要类被加载,静态变量的值就会一直存在——它几乎与 Activity 生命周期无关(onCreate, ..., onDestroy)

第一次从代码访问一个类时,它会被加载,然后它不会消失,直到有理由卸载它。在此期间,您应用程序中的任何内容(从技术上讲是在同一进程中——通常每个 .apk 使用自己的进程)将从这些静态信息中读取相同的值。如果您从不同的地方更改它,您会为不知道更改的其他部分更改它 - 这就是它不好的原因:)

Android 卸载类的唯一原因(据我所知)是您的应用程序已完全从内存中删除 - 通过任务 killer 或当您的应用程序不再处于 Activity 状态且内存不足时。这完全不受您的控制,并且在您使用应用程序时不应发生。如果例如,它可能会发生一个电话打进来,您的应用稍后恢复。

关于android - 清除静态数据 onDestroy(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9749078/

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