Android NDK — использование AssetManager в нативном коде

Мне нужно работать с ассетами в моей папке с ассетами из кода C/C++. Безопасно ли кэшировать указатель на AAssetManager следующим образом...:

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;    
}

... и затем использовать его всякий раз, когда мне это нужно? createAssetManager вызывается из метода Java onCreate основного действия (потока пользовательского интерфейса), но использование в C/C++ происходит при естественной обработке рендеринга и игрового тика, вызываемого из собственных методов в реализации GLSurfaceView.

1) Будет ли указатель assetsMgr указывать на действительный объект в течение всего срока службы приложения? Достаточно ли создать его также как статическую переменную на стороне Java (в классе Activity), чтобы сборщик мусора не уничтожил ее?

2) есть ли опасность, что у меня возникнут проблемы с потоками?

Спасибо, Том Атом

6
задан Tom Atom 19 June 2012 в 14:56
поделиться