Когда и почему мой экземпляр синглтона Java уничтожается?

У меня есть приложение для Android, настроенное для запуска Java-активности (назовите его MyJavaActivity), которое, в свою очередь, запускает NativeActivity. Когда NativeActivity завершается, он возвращается обратно в MyJavaActivity.

У меня также есть одноэлементный класс Java (назовите его MyJavaSingleton), который я хотел бы оставить в памяти на протяжении всего жизненного цикла моего приложения. Я установил некоторые переменные-члены одноэлементного класса из моего NativeActivity (с помощью JNI), которые позже можно будет получить с помощью MyJavaActivity.

Проблема в том, что экземпляр MyJavaSingleton, кажется, находится в памяти до тех пор, пока NativeActive не выйдет, но каким-то образом кажется, что снова установлено значение null, когда 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! 
 }

В приведенном выше извлечении кода «Новый экземпляр MyJavaSIngleton» печатается при первом запуске приложения, а затем снова сразу после выхода из NativeActivity (то есть после выхода android_main) и повторного вызова MyJavaActivity onCreate.

Почему MyJavaSingleton.mInstance становится NULL при повторном входе в MyJavaActivity?

9
задан lost_bits1110 21 September 2011 в 17:56
поделиться