2010-07-03 743 views
6

Tôi thực sự đang vật lộn ở đây và nó đang giữ tôi trở lại.Cách thích hợp để xử lý vòng đời Hoạt động với OpenGL

Cách chính xác để xử lý OpenGL là gì và Hoạt động - khởi chạy các hoạt động phụ hoặc quay lại màn hình chính. Và có nó tiếp tục chính xác nơi nó được.

Tôi có nó bán làm việc vì nó đứng, kết cấu/VBO được tải lại tại onResume() khi cần thiết.

Nhưng đôi khi, khi khởi chạy hoạt động phụ và quay lại hoặc quay về màn hình chính và quay lại, onCreate đang được kích hoạt lại. Điều này làm rối tung mọi thứ, và tôi kết thúc với một màn hình màu đen.

Tôi chắc chắn rằng tôi đang làm toàn bộ điều sai. Ai đó có thể giải thích cách một người nên xử lý một Hoạt động như thế này?

Trả lời

1

Bạn đang làm việc với nền tảng nào?

Lý do tôi hỏi là trước khi Eclair toàn bộ khu vực này bị thủng với các lỗi với kết quả là việc tạm dừng/tiếp tục OpenGL về cơ bản chỉ làm việc một cách tình cờ. Tuy nhiên, những điều này dường như đã được cố định bởi Eclair và ứng dụng của chúng tôi dường như bị tạm ngưng và tiếp tục khá đáng tin cậy.

Điều bạn đang cho là cần làm là đăng ký gọi lại cho SurfaceHolder để bạn được thông báo khi bề mặt xuất hiện và biến mất. Trong phương thức surfaceDestroyed(), bạn tắt hoàn toàn EGL, và sau đó trong phương thức surfaceCreated() của bạn, bạn khởi tạo lại nó. Bạn không nên làm bất kỳ điều này từ các phương thức onCreate()/onResume() của Activity, vì bề mặt có thể không xuất hiện và biến mất cùng một lúc.

Điều đó nói rằng, ứng dụng của chúng tôi được thiết kế cho Cupcake, khi mọi thứ khá nguyên thủy. Tôi thu thập rằng những ngày này có những lớp học tiện ích có sẵn để thực hiện tất cả việc nâng hạng nặng cho bạn, vì vậy nếu bạn đang sử dụng một trong những thứ đó có thể hoạt động khác nhau; và nếu không, bạn có thể muốn xem xét chúng.