2011-02-06 44 views
5

Tôi đang sử dụng GLSurfaceView (phiên bản sdk 7) trong RENDERMODE_WHEN_DIRTY. Các tài liệu nói rằng tôi cần phải gọi onPause/onResume, nhưng nó hoạt động tốt mà không có nó, vì vậy tôi tự hỏi. Nó có cần thiết không? Điều gì có thể xảy ra nếu tôi không?GLSurfaceView: Tôi có cần phải gọi onPause/onResume không?

+0

nó hoạt động tốt ngay cả khi bạn rời khỏi ứng dụng và quay trở lại? Tôi đã luôn luôn cần phải thực hiện onPause và onResume để giữ cho GlSurfaceView hoạt động sau khi rời khỏi và trở về ứng dụng. – Nitrex88

+0

Có, nó hoạt động tốt trong mọi điều kiện: màn hình chính trở lại, chuyển đổi màn hình off-unlock-return, mất tiêu điểm sau đó quay trở lại. Nó đã được chạy tốt cho một vài tuần và tôi chỉ xảy ra để đọc những thứ onPause trong tài liệu, vì vậy tôi tự hỏi. – ADB

Trả lời

10

Việc thực hiện onPause GLSurfaceView trông như thế này:

/** 
* Inform the view that the activity is paused. The owner of this view must 
* call this method when the activity is paused. Calling this method will 
* pause the rendering thread. 
* Must not be called before a renderer has been set. 
*/ 
public void onPause() { 
    mGLThread.onPause(); 
} 

Bạn có thể nhìn thấy (và các tài liệu hướng dẫn quốc gia) mà nó dừng thread rendering. Điều này gây ra một cuộc gọi nội bộ trong GLThread để stopEglLocked mà trông như thế này:

private void stopEglLocked() { 
     if (mHaveEgl) { 
      mHaveEgl = false; 
      mEglHelper.destroySurface(); 
      mEglHelper.finish(); 
      sGLThreadManager.releaseEglSurface(this); 
     } 
} 

Vì vậy, bạn có thể nhìn thấy nó phá hủy bề mặt mà là một tài nguyên hệ thống đắt tiền, và gây ra thread để chờ đợi(), mà còn tiết kiệm tài nguyên hệ thống , cpu, baterry, v.v.

Vì vậy, hãy yêu cầu bật chế độ onPause và onResume của GLSurfaceView.

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