Ho bisogno di lavorare con le risorse nella mia cartella delle risorse da codice C/C++. E 'sicuro per memorizzare nella cache puntatore a AAssetManager così ...:NDK Android - utilizzo di AssetManager nel codice nativo
AAssetManager* assetMgr = NULL;
void Java_com_example_createAssetManager(JNIEnv* env, jclass clazz, jobject assetManager)
{
AAssetManager* mgr = AAssetManager_fromJava(env, assetManager);
assert(NULL != mgr);
assetMgr = mgr;
}
... e poi usarlo ogni volta che ne ho bisogno? Il metodo createAssetManager viene chiamato dal metodo onCreate di Java dell'attività principale (thread dell'interfaccia utente), ma l'utilizzo in C/C++ si verifica quando l'elaborazione nativa del rendering e del gioco viene richiamata dai metodi nativi nell'implementazione di GLSurfaceView.
1) il puntatore assetMgr punta all'oggetto valido per tutta la durata dell'app? È sufficiente crearlo anche come variabile statica sul lato Java (nella classe Activity) in modo che il garbage collector non lo distrugga?
2) C'è qualche pericolo in cui si verificheranno dei problemi con i thread?
Grazie, Tom Atom
Errare sul lato sicuro e non memorizzare nella cache. 'AAssetManager_fromJava()' è molto veloce. –
Grazie per la risposta. Il motivo per cui ho voluto nasconderlo era che non so come ottenere il puntatore senza avere "jobject assetManager" nella chiamata al metodo. Quindi, devo aggiungere questo parametro in ogni chiamata tick da Java a C/C++ solo per il caso che mi servirà durante il tick? O c'è un modo in cui posso interrogare Java per l'oggetto in tempo quando ne ho bisogno (chiedi a Java per AssetManager, quindi chiama AAssetManager_fromJava, quindi usalo ...) –