C/C++コード内から自分のアセットフォルダ内のアセットを操作する必要があります。このようにAAssetManagerへのポインタをキャッシュするのは安全ですか?:Android NDK - AssetManagerをネイティブコードで使用する
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は、メインアクティビティ(UIスレッド)のJava onCreateメソッドから呼び出されますが、C/C++での使用方法は、GLSurfaceView実装でネイティブメソッドからレンダリングとゲームティックをネイティブに処理するときです。
1)assetMgrポインタが有効なオブジェクトを指していますか?それはガベージコレクタがそれを破壊しないように、Java側の静的変数(Activityクラス内)のようにも作成するのに十分ですか?
2)スレッドにいくつかの問題が発生する危険性がありますか?
おかげで、トムアトム
安全面でエラーが発生し、キャッシュされません。 'AAssetManager_fromJava()'は非常に高速です。 –
ありがとうございます。私がキャッシュしたいのは、メソッド呼び出しで "jobject assetManager"を持たずにポインタを取得する方法がわからないからです。だから、このパラメータをJavaからC/C++へのすべてのティックコールに追加しなければならないのですか?または、私がそれを必要とするときにオブジェクトのJavaをどのように問い合わせることができるか(AssetManagerのJavaに依頼してから、AAssetManager_fromJavaを呼び出して使用する) –