如果我的应用程序有太多静态变量或方法,那么根据定义,它们将存储在堆中.如果我错了,请纠正我
1)在应用程序关闭之前,这些变量是否会在堆上?
2)他们可以随时使用GC吗?如果没有,我可以说它是内存泄漏?
我不清楚何时使用PopupWindow vs Dialog.任何见解都会非常感激.谢谢.
我一直在研究在创建视图时防止上下文/活动内存泄漏的最佳实践,而且我似乎无法找到关于类中静态字段允许或不允许的内容的明确答案.
假设我有这种形式的代码:
public class MyOuterClass extends Activity{
private MyInnerClass;
MyInnerClass = (MyInnerClass) findViewById(<XML call here>);
MyInnerClass.myXInt = 3;
// onCreate(), onResume(), etc.
public static class MyInnerClass extends SurfaceView implements Runnable{
// Safe variables?
private static int myXInt, myYInt;
private static boolean myBoolean;
// Potentially safe?
private static Canvas myCanvas;
// Definitely bad.
private static Context myContext;
public MyInnerClass(Context context){
myContext = context; // This is bad.
}
}
}
Run Code Online (Sandbox Code Playgroud)
关于JVM实际上认为MyInnerClass的ClassLoader是什么,我有点困惑.从技术上讲,由于它是一个SurfaceView对象,一旦应用程序实例化MyInnerClass一次(在View首次膨胀时发生),静态变量似乎应该总是存在,然后保持在那里直到应用程序本身终止.如果是这种情况,是什么阻止Bitmaps和Canvas对象保持打开并填满堆?
我曾经反复重复的唯一一句话就是你不能像我在构造函数中看到的那样泄漏静态上下文,但它永远不会超越它.这真的是你唯一不能做的事情吗?
memory android memory-leaks android-context android-activity
android ×2
memory-leaks ×2
comparison ×1
dialog ×1
java ×1
memory ×1
popupwindow ×1
use-case ×1