2011-11-10 10 views
6

JavaActivity uygulamasından NativeActivity özelliğini arıyorum. Benim NativeActivity giriş noktası (denirdi benim ana faaliyeti sadece kapatırsa Ancak bunun yerine denir Java Faaliyet dönme,NativeActivity işlemi bitmiyor

ANativeActivity_finish 

diyoruz, bu sonunda

android_main(struct android_app* state) 

olduğunu sadece startActivity kullanarak). Duraklama durumunda gibi görünüyor. Bir önceki etkinliğe geri dönebilmemin tek yolu, android_main'imin sonundaki exit(0) numaralı telefonu arayarak, bu işlemi sonlandırır ve diğer sorunlara neden olur.

NativeActivity sayfasından başarılı bir şekilde nasıl çıkabilir ve JavaActivity işlevine dönebilirim?

+0

ben aramaya gerek birçok insan var, bu soru cevap edilmemiştir neden acaba NativeActivity, (Java) Activity's öğesinden mi ve onlardan mı dönüyor? –

cevap

6

Aynı sorunla karşılaşıyorum. Temel döngü anativeActivity_finish (..) ana döngüsünde çağrıldığında, benim için çalışır, çünkü durumları geçersiz kılar ve statik void android_app_destroy (struct android_app) 'da ANativeActivity_finish (..)' i çağırdıktan sonra state-> destroyRequested değerini 1 olarak ayarlayarak uygulamanın kendisini tamamlar. * android_app) (android_native_app_glue.c C: 173).

void android_main(struct android_app* state) 
{ 
    // Attach current state if needed 
    state->activity->vm->AttachCurrentThread(&state->activity->env, NULL); 
    ... 
    // our main loop for the app. Will only return once the game is really finished. 
    while (true) { 
    ... 
    while ((ident=ALooper_pollAll(engine.animating ? 0 : -1, NULL, &events,(void**)&source)) >= 0) { 
     ... 
     // Check if we are exiting. Which is the case once we called ANativeActivity_finish(state->activity); 
     if (state->destroyRequested != 0) 
     { 
     // Quit our app stuff herehere 
     // detatch from current thread (if we have attached in the beginning) 
     state->activity->vm->DetachCurrentThread(); 
     // return the main, so we get back to our java activity which calle the nativeactivity 
     return; 
     } 
    } 
    if (engine.animating) 
    { 
     // animation stuff here 
    } 
    // if our app told us to finish 
    if(Closed) 
    { 
     ANativeActivity_finish(state->activity); 
    } 
    } 
} 

Eh çok geç sanırım sizin için, ama bu yüzden aynı sorunlarla karşılaşır herkes için burada yazılan bir sultion bulamadığı için ben üzerinde çok fazla zaman geçirdi. kopmakta ile ilgili diğer zor konular hakkında daha fazla ve takmak çağrılar burada bulabilirsiniz: Access Android APK Asset data directly in c++ without Asset Manager and copying

+0

Uygulama yaşam döngüsünün hangi noktasında Kapalı olarak ayarlandığını sorabilir miyim? Hangi APP_STATE? – Dev2rights

+0

Bu, motorumun ana döngüsünde gerçekleşir. Kullanıcı oyundan çıktığında, yani ana menüde arka tuşa basıldığında ve kullanıcı oyunu kapatmak için komut istemini kabul ettiğinde. Yani bu belirli bir Android APP_STATE'de gerçekleşmez. Ama aslında, Kapalı = gerçek çağrı sadece animasyonlu "durum" da gerçekleşebilir, çünkü oradaki eşit sistemimi güncellerim. if (engine.animating) {// animasyon şeyler burada} – odbb

2

bana (bir alt sınıfı) bitirmek için nihayet app (yerel tarafında) NativeActivity çalışmış bir çözüm java yöntemi çağırıyordu Bu UI iş parçacığı üzerinde finish() çalışır.

C/C++ tarafı:

... 

jmethodID FinishHim = jni->GetMethodID(activityClass, "FinishMe", "()V"); 
jni->CallVoidMethod(state->activity->clazz, FinishHim); 

Java tarafı:

public class CustomNativeActivity extends NativeActivity { 

    ... 

    public void FinishMe() { 
     this.runOnUiThread(new Runnable() { 
      public void run() { 
       finish(); 
      } 
     }); 
    } 
}