Tôi cần làm việc với các nội dung trong thư mục nội dung của mình từ bên trong mã C/C++. Có an toàn để lưu vào bộ nhớ cache con trỏ tới AAssetManager như thế này không: ...Android NDK - sử dụng AssetManager trong mã gốc
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;
}
... và sau đó sử dụng nó bất cứ khi nào tôi cần? Hàm createAssetManager được gọi từ phương thức Java onCreate của Activity chính (UI thread) nhưng việc sử dụng trong C/C++ là khi xử lý nativly rendering và tick trò chơi được gọi từ các phương thức native trong thực thi GLSurfaceView.
1) tài sảnMgr trỏ trỏ đến đối tượng hợp lệ trong toàn bộ thời gian ứng dụng? Là nó đủ để tạo ra nó cũng giống như biến tĩnh trên Java bên (trong lớp Activity) để thu gom rác sẽ không phá hủy nó?
2) có một số nguy hiểm mà tôi sẽ gặp phải một số vấn đề với chuỗi không?
Cảm ơn, Tom Atom
Err ở bên an toàn và không lưu vào bộ nhớ cache. 'AAssetManager_fromJava()' rất nhanh. –
Cảm ơn bạn đã trả lời. Lý do tại sao tôi muốn cache nó là tôi không biết cách lấy con trỏ mà không có "jobject assetManager" trong lời gọi phương thức. Vì vậy, tôi có phải thêm tham số này vào mỗi cuộc gọi đánh dấu từ Java đến C/C++ chỉ cho trường hợp tôi sẽ cần nó trong khi đánh dấu? Hoặc có cách nào đó làm sao tôi có thể truy vấn Java cho đối tượng trong thời gian khi tôi cần nó (hỏi Java cho AssetManager, sau đó gọi AAssetManager_fromJava, sau đó sử dụng nó ...) –