我有一个单例 Toast 显示类,它跟踪当前的 toast 并在再次启动时取消它:
public enum SingleToast {
INSTANCE;
private Toast currentToast;
private String currentMessage;
public void show(String message, int duration) {
if (message.equals(currentMessage)) {
currentToast.cancel();
}
currentToast = Toast.makeText(App.getContext(), message, duration);
currentToast.show();
currentMessage = message;
}
}
(此示例的扩展说明可在此处找到:toast issue in android)
链接中的答案与这段代码之间的主要区别在于上下文,它不作为参数传递。我使用 App 类中保存的静态上下文来获取它,该上下文在应用程序启动时保存:
public class App extends Application {
private static Context context;
@Override
public void onCreate() {
super.onCreate();
context = getApplicationContext();
}
public static Context getContext() {
return context;
}
}
我在几个博客中读到过这个简单的上下文解决方案,它对于检索类中的上下文有很大帮助,对于这些类来说,将上下文作为参数传递是很烦人的,甚至是不可能的。
但是,我想知道我是否造成了内存泄漏!
首先:静态上下文本身是否会导致内存泄漏(如果是,我怎样才能防止它而不必总是到处传递上下文?)
其次:即使上下文本身不是静态的,在 toast 对象中使用上下文并将其保存为单例中的字段是否有问题?
最佳答案
第一 不会,如果只在Application中保存上下文,如上所述,不会导致内存泄漏。
关于第二种情况,与第一种情况几乎相同,但第一种实现起来比第二种更简单。
关于java - 静态上下文保存在 Application 类中并在单例 Toast 构建器中使用,这是否会造成内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40573279/