2016-05-11 14 views
2

Ich lade eine gemeinsame Bibliothek mit der klassischen System.loadLibrary() -Methode aus einem statischen Java-Block. Die Bibliothek hat Objekt global statisch zugeordnet:Android - Native globale Objektdestruktor nie aufgerufen

class Foo 
{ 
public: 
    Foo() 
    { 
    } 

    ~Foo() 
    { 
     logtofile("Foo::~Foo() called"); 
    } 
} 


Foo dummy; 

Die globale Funktion LogToFile schreibt auf der SD-Karte eine Protokolldatei. Während der Konstruktor beim Laden der Bibliothek aufgerufen wird, scheint mir der Destruktor nie aufgerufen zu werden. Ich erwartete, dass zwischen zwei Konstruktorenaufrufen ein Destruktoraufruf sein sollte. Die Frage ist also: Wann wird der Foo-Destruktor aufgerufen?

Antwort

1

Android entlädt nie native Bibliotheken; in der Regel stirbt der App-Prozess spontan, wenn das System entscheidet, dass es seine Ressourcen benötigt - und es tut ein Äquivalent von kill -9, nie Destruktoren oder Java finalize() aufrufen.

Verwandte Themen