Tất cả,NDK của Android: Cách xóa mã gốc sau khi khởi động lại hoạt động?
Tôi biết rằng theo mặc định, hoạt động sẽ bị giết và khởi động lại khi hướng màn hình thay đổi hoặc bàn phím được trượt vào hoặc ra. (Xem Activity restart on rotation Android). Câu hỏi của tôi là, cách chính xác để xử lý điều này từ phối cảnh mã Native là gì? ví dụ. nếu tôi có một khối tĩnh tải một thư viện gốc và ứng dụng của tôi được khởi động lại, làm thế nào để đảm bảo rằng bất kỳ bộ nhớ nào trong vùng đất bản địa được xử lý một cách thích hợp? Vấn đề là
Khi chúng tôi xoay thiết bị, có vẻ như giống như một hồ bơi Chủ đề riêng được tạo ra và cũ không bao giờ bị xóa. này có nghĩa là mỗi khi ai đó biến thiết bị, chúng tôi có nhiều hơn một tấn đề ngồi nhàn rỗi và chiếm nhớ
Làm thế nào để đảm bảo rằng điều này không xảy ra? Tôi nhìn thấy từ JNIExample page một số ghi chú ở phía dưới:
[*] vấn đề không được giải quyết và lỗi Thậm chí dù ví dụ này là hoàn toàn chức năng, có một vài vấn đề chưa được giải quyết còn lại, mà tôi đã không thể tìm ra cho đến nay. Sự cố xuất hiện khi bạn bắt đầu hoạt động , sau đó nhấn nút Quay lại để ẩn nó và sau đó bắt đầu lại. Theo kinh nghiệm của tôi, các cuộc gọi đến các chức năng gốc trong hoạt động được khởi động lại như vậy sẽ không thành công một cách ngoạn mục. callVoid() chỉ đơn giản là treo với một lỗi segmentation , trong khi các cuộc gọi đến getNewData() và getDataString() nguyên nhân JVM để hủy bỏ với một lỗi, bởi vì nó không còn hài lòng với cache trên toàn cầu đối tượng tham khảo. Có vẻ như hoạt động khởi động lại bằng cách nào đó làm mất hiệu lực tham khảo cache đối tượng của chúng tôi, mặc dù họ được bảo vệ với NewGlobalRef(), và hoạt động đang chạy trong gốc JVM (hoạt động khởi động lại không không có nghĩa là JVM chính nó là khởi động lại) . Tôi không có giải thích rõ ràng về lý do xảy ra, vì vậy nếu bạn có bất kỳ ý tưởng nào, vui lòng cho tôi biết.
Điều này đã được giải quyết chưa?