Wszystko,Android NDK: jak wyczyścić kod natywny po ponownym uruchomieniu działania?
Jestem świadomy, że domyślnie działanie zostanie zabite i uruchomione ponownie po zmianie orientacji ekranu lub wsunie lub zsunie się klawiatura. (Patrz Activity restart on rotation Android). Moje pytanie brzmi, jaki jest prawidłowy sposób obsługi tego z perspektywy kodu macierzystego? na przykład jeśli mam statyczny blok ładujący natywną bibliotekę i moja aplikacja jest ponownie uruchamiana, jak mogę zapewnić, że każda pamięć w rodzimej krainie jest odpowiednio traktowana? Problemem jest
Kiedy obrócić urządzenie, wygląda jak oddzielny basen Temat jest tworzony a stare nie są usuwane. To oznacza, że za każdym razem ktoś włącza urządzenie, mamy mnóstwo więcej wątków siedzi bezczynnie i podejmowania pamięć
Jak mogę upewnić się, że tak się nie stanie? Widzę ze JNIExample page niektórych notatek na dole:
[*] Nierozwiązane problemy i błędy Nawet chociaż Przykładem jest całkowicie funkcjonalne, istnieje kilka nierozwiązane kwestie pozostałe, które nie był w stanie dowiedzieć się do tej pory. Problemy pojawiają się po rozpoczęciu działania , a następnie naciśnij przycisk Wstecz, aby ukryć, a następnie uruchomić go ponownie. Z mojego doświadczenia wynika, że połączenia z rodzimymi funkcjami w takiej ponownie uruchomionej działalności zakończy się niepowodzeniem. callVoid() prostu wywala z segmentacja winy, natomiast wywołań getNewData() i getDataString() powodują JVM, aby przerwać z błędem, ponieważ nie jest już zadowolony z pamięci podręcznej globalnie obiekt odniesienia. Wydaje się, że aktywność restart jakoś unieważnia nasze buforowane odwołań do obiektów, choć są chronione NewGlobalRef() i aktywność pracuje w oryginalny JVM (aktywność restarcie nie nie znaczy, że sama JVM wznowiona) . Nie mam dobrego wyjaśnienia, dlaczego tak się dzieje, więc jeśli masz jakieś pomysły, proszę daj mi znać: .
Czy to rozwiązano?