gpt4 book ai didi

java - 什么时候/为什么我的 Java 单例实例被销毁?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:29:01 24 4
gpt4 key购买 nike

我有一个设置为启动 Java Activity (称为 MyJavaActivity)的 Android 应用程序,它又启动了一个 NativeActivity。当 NativeActivity 完成时,它返回到 MyJavaActivity。

我还有一个 Java 单例类(称为 MyJavaSingleton),我想在应用程序的整个生命周期中将其保留在内存中。我从我的 NativeActivity(使用 JNI)设置了一些单例类的成员变量,稍后可以由 MyJavaActivity 检索。

问题是,在 NativeActive 退出之前,MyJavaSingleton 实例似乎一直在内存中,但是当 MyJavaActivity 再次启动时,似乎又以某种方式设置为空,所以我在 NativeActivity 中设置的所有变量现在都重置为默认值。为什么会这样?

 public class MyJavaActivity extends Activity implements View.OnTouchListener
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
MyJavaSingleton.Instance().DoStuff();
}

@Override
public boolean onTouch(View arg0, MotionEvent arg1)
{
Intent intent = new Intent(MyJavaActivity.this, NativeActivity.class);
startActivity(intent); // at this point, android_main will be executed
}
}

/////////////////////////////
public class MyJavaSingleton
{
static private MyJavaSingleton mInstance = null;
synchronized public static MyJavaSingleton Instance()
{
if( mInstance == null )
{
mInstance = new MyJavaSingleton();
Log.v(TAG, "New MyJavaSIngleton instance");
}
return mInstance;
}
}
/////////////////////////////
// Native
void android_main(struct android_app* state)
{
// Do various stuff, set some variables on the MyJavaSingleton
// At this point, MyJavaSingleton.mInstance is still at the same address in memory, which is good //
ANativeActivity_finish(state->activity);
exit(0);
// Problem: sometime after this exit and before MyJavaActivity::onCreate is called, MyJavaSingleton.mInstance is set to null!
}

在上面的代码提取中,“New MyJavaSIngleton instance”在应用程序首次启动时打印,然后在 NativeActivity 退出后(即退出 android_main 后)再次打印,并再次调用 MyJavaActivity 的 onCreate。

为什么重新进入MyJavaActivity时MyJavaSingleton.mInstance会变成NULL?

最佳答案

每个 Android 应用都在自己的进程中运行,因此只要它持续运行,您的单例就可用。当进程结束时,你的单例就丢失了。因此,当应用程序重新启动时,将需要重新创建此单例对象。

关于java - 什么时候/为什么我的 Java 单例实例被销毁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7503997/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com