2012-09-20 26 views
16

Trong ứng dụng Android của tôi được phát triển với libGDX, tôi sử dụng Gdx.app.exit() khi người dùng cố gắng thoát khỏi trò chơi. Điều này đóng các trò chơi, nhưng khi người dùng khởi động lại ứng dụng tất cả các Textures được tranh giành (vượt quá điểm của việc sử dụng các ứng dụng). Tôi nhận thấy rằng nếu tôi buộc đóng ứng dụng từ trình quản lý tác vụ, thì nó sẽ khởi động lại đúng cách.Libgdx app.exit() trên Android không đóng ứng dụng

Tại sao điều đó xảy ra?

Trả lời

23

Bạn đã khám phá lại sự không phù hợp giữa tuổi thọ của các đối tượng Java (gắn liền với tuổi thọ của quy trình ứng dụng) và tuổi thọ của đối tượng kết cấu (gắn liền với cuộc sống của ngữ cảnh OpenGL được gắn với khả năng hiển thị của Hoạt động) .

Trên ứng dụng "thoát", chỉ hoạt động đã thoát và Android đang lưu vào bộ nhớ cache trong quá trình chạy ẩn. Khi bạn "khởi động lại" ứng dụng Android vừa mới bắt đầu Hoạt động mới trong cùng một quy trình. Trong trường hợp này, Activity đang tìm đối tượng Java Texture hợp lệ, nhưng các byte bên dưới nó "trỏ tới" trong ngữ cảnh OpenGL sẽ biến mất (vì bối cảnh OpenGL bị vô hiệu khi Activity không còn nhìn thấy được).

Khắc phục là tải lại họa tiết khi tạo hoạt động. Bạn phải chắc chắn rằng tất cả các đối tượng của bạn có chứa các kết cấu (và các đối tượng chứa các đối tượng có chứa các kết cấu, vv) được gắn với vòng đời Activity. Nói chung điều này có nghĩa là tránh các biến tĩnh (là một phần của vòng đời ứng dụng), nhưng bạn có thể nhảy qua các vòng để vô hiệu hóa và tái khởi tạo các hình cầu nếu bạn muốn.

Các vấn đề liên quan