在我的应用程序中,我有Loginactivity。它有一个静态变量用户名,它将被分配给用户输入用户名的值。 Loginactivity启动活动A和A启动B.在A i中使用变量Loginactivity.username。
现在由于B中的一些错误,应用程序崩溃了。当我按下force关闭时,应用程序重新启动,活动A是当前活动。在活动A中,我使用的是静态变量Loginactivity.username。我看到崩溃后这个变量的初始值是空字符串"&#34 ;;
为什么会这样?你能解释一下这种行为吗?因此,当应用程序崩溃时,堆栈中的所有活动都会重新启动?我看到登录活动的oncreate没有被调用。那么静态变量值如何变化?
答案 0 :(得分:12)
是的,当应用程序崩溃时,重新启动此应用程序的jvm,重新加载类,并丢失所有静态变量以及实例变量。
解决方案是消除崩溃原因。 :)
答案 1 :(得分:3)
当您的活动B崩溃时,您的应用程序运行的Android Dalvik虚拟机(每个应用程序都有自己的DVM,这是独立的进程)都会被终止。当您启动活动A时,用户名为“”,因为默认情况下,Java将所有实例变量(类变量或字段,如果您喜欢)设置为null(引用),0(基元)和字符串的“”。所以你的活动A正常工作。您只需将用户名存储在共享首选项,数据库中,或触发事件以便用户再次登录...我还会修复活动B ...哈哈
答案 2 :(得分:2)
使用SharedPreferences,或在Application class
中存储信息答案 3 :(得分:1)
这是因为您在LoginActivity中保留了此静态成员导致的内存泄漏。
我会考虑将此变量保存在Application范围(自定义应用程序类)中,或将其保存到DB中。
无论如何,只需记住在应用程序完成后取消此变量。