Java 未完成类字段的Android初始化

Java 未完成类字段的Android初始化,java,android,initialization,ondestroy,Java,Android,Initialization,Ondestroy,在这件事上,我一直在努力寻找合适的标题。我遇到过一些奇怪/令人困惑的情况,这些情况只有在我有时初始化字段时才被发现 在这种情况下,我有一个布尔值,我初始化为false(我知道,冗余…但是…) 应用程序运行正常,并且在退出之前,我的布尔值设置为true。我观察日志猫以查看是否调用了onDestroy() 然后重新启动应用程序 我的布尔值为true,我现在在onCreate()中登录它的值 WTF 我注意到该活动以一个新的PID开始。然而,它绕过了字段初始化。请注意,我有些不是多余的。这是怎么回事

在这件事上,我一直在努力寻找合适的标题。我遇到过一些奇怪/令人困惑的情况,这些情况只有在我有时初始化字段时才被发现

在这种情况下,我有一个布尔值,我初始化为false(我知道,冗余…但是…)

应用程序运行正常,并且在退出之前,我的布尔值设置为true。我观察日志猫以查看是否调用了onDestroy()

然后重新启动应用程序

我的布尔值为true,我现在在onCreate()中登录它的值

WTF


我注意到该活动以一个新的PID开始。然而,它绕过了字段初始化。请注意,我有些不是多余的。这是怎么回事

然后,我从设备上的设置菜单强制停止应用程序。重新启动应用程序后,将按预期显示所有内容,布尔值=false

那么onDestroy()不是一个可靠的/真正的终端吗?我不记得读过这样的书

这不是我的应用程序,而是一个例子:

public class MyActivity extends Activity {
/**
 * Called when the activity is first created.
 */
private static boolean b = false;
private static int i = 1;
private static final String TAG = "junk app";
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Log.i(TAG, "==================================================================");
    if(b) Log.i(TAG,"boolean is true");
    if(!b) Log.i(TAG,"boolean is false");
    Log.i(TAG,"The value of i is"+i);
    i++;
    b=!b;

    foo();
}
public void foo() {
    finish();
}

@Override
public void onResume() {
    Log.i(TAG,"onResume");
    super.onResume();
}

@Override
public void onStop() {
    Log.i(TAG,"onStop");
    super.onStop();
}
@Override
public void onDestroy() {
    Log.i(TAG,"onDestroy");
    super.onDestroy();
}
}

在设备上运行此应用程序并查看日志。调用onDestroy()。现在从图标重新启动应用程序。i递增,b变为!b

IDK但我(天真的)期望是,如果一个应用程序被破坏,如果它被重新启动,它会重新启动,所有初始化等都会再次完成

静态是静态的——它们对流程是全局的。那么它们的价值呢 将持续整个流程的生命周期,这通常是非常重要的 比单个活动实例更长


来源:

请发布一个重新创建此问题的简单代码示例。您是否在
ondestory()
中将布尔值设置为
false
?否。布尔值在初始化部分设置为false,即在公共类MainActivity之后。它后来被设置为true。该应用程序最终被销毁。如果重新启动应用程序,布尔值仍然为真“我注意到活动以新PID开始…”你确定吗?有证据吗?哇那真的很有趣。。我也刚刚看到了它的实际应用。。我离开办公桌45分钟,重新开始上面的测试,它带有一个新的PID,所有的静态都被重新初始化。我将在将来记住这一点,现在通过我的代码返回,看看应该更改什么。感谢您快速准确的回复!事实上我和你有着同样的理解,所以我很高兴我也从中学到了一些东西。我尽量避免使用静态变量,但有时我需要它们,最好至少了解一下幕后发生的事情。