ani*_*van 4 java static android
很长一段时间,只要应用程序运行,我就认为静态[实例]变量存在是幸福的.然而,令我沮丧的是,我惊慌失措,我觉得这不是真的.
仅仅测试,我创建了一个静态的字符串列表,并在我的主activity
类中覆盖了onDestroy
打印消息的方法,以验证应用程序退出.在onCreate
方法中我只需添加一个新的string
,并打印列表的内容.我发现的是列表的大小不断增加,之前添加的所有字符串值仍然存在.
我已经阅读了[甚至在这里的SO],只要应用程序存在实例变量,但我担心它并非如此.
更确切地说,我在使用Facebook SDK for Android时意识到了这个问题.我已经看到,班级AuthListener
中听众列表中的实例SessionEvents
随着时间的推移不断增加.因此,无论何时启动应用程序并且用户使用FB登录,侦听器方法都会被触发,因为类中存在实例SessionEvents
.
有人曾经观察到这一点,并且有一些重大错误我正在致力于理解android是如何工作的吗?
是什么赋予了?
谢谢阅读!
[ 更新 ]
我站在纠正BalusC
和rdineiu
.我真的不想在这里创建关于实例和类变量的混淆.唉,我急忙发布我的问题,我犯了一个我不想做的错误.我很清楚static
和instance
变量之间的区别.我只是想编写class
变量,并不能完全弄清楚将静态变量称为instance
变量的过程.
但是,我的问题仍然存在.
@MisterSquonk - 不,我不会在这里混淆我的Activity
目的何时以及应用程序何时被销毁.这是我在样本上尝试的内容 - 我只有一个Activity
用作样本Main
.当我按下后退按钮时Activity
,我假设Activity
从堆栈中删除了应用程序并且应用程序也被破坏了.我已启动任务管理器以验证我的应用程序不再运行.
您似乎没有区分静态变量和实例变量.静态变量是在类本身上定义的.实例变量仅存在于类实例中.
例:
class Test {
public static int a;
}
Run Code Online (Sandbox Code Playgroud)
变量a
是在类本身上定义的,而不是在类的实例上定义的.每个实例都将访问同一个变量.如果一个实例设置a
to 的值5
,则每个其他实例都将该值视为5
.实例消失后,变量不会消失,因为它与任何实例无关(它是一个类变量).它会一直持续到那个时间结束(或者直到应用程序退出,以先到者为准).
另一方面,以下示例使用实例变量:
class Test {
public int a;
}
Run Code Online (Sandbox Code Playgroud)
此变量只能从类的实例访问.每个实例都有一个不同的变量副本.一旦实例被销毁,变量就会随之而来.
为了显示:
import java.util.List;
import java.util.ArrayList;
class Test {
// instanceVar will be initialized whenever a new Test object is created
private List<Integer> instanceVar = new ArrayList<Integer>();
// staticVar will be initialized right now
private static List<Integer> staticVar = new ArrayList<Integer>();
public void updateInstanceVar() {
instanceVar.add(1);
instanceVar.add(2);
}
public void updateStaticVar() {
staticVar.add(1);
staticVar.add(2);
}
public static void main(String[] args) {
Test test1 = new Test();
test1.updateInstanceVar(); // test1.instanceVar = [1, 2]
test1.updateStaticVar(); // Test.staticVar = [1, 2]
Test test2 = new Test();
test2.updateInstanceVar(); // test2.instanceVar = [1, 2]
test2.updateStaticVar(); // Test.staticVar = [1, 2, 1, 2]
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10970 次 |
最近记录: |