我希望我的应用程序在用户触摸GLSurfaceView时在GLSurfaceView上显示ZoomButtonsController。我的活动构造函数如下所示:
_zoomButtonsController = new ZoomButtonsController(_surface);
_zoomButtonsController.setAutoDismissed(true);
_zoomButtonsController.setOnZoomListener(_zoomListener); // Set listener
然后,当用户生成
onTouchEvent()
事件时,我重写ACTION_MOVE
以使ZoomButtonsController可见:/** Called when user generates touch event */
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_MOVE:
// Does this somehow register an IntentListener???
if (_zoomButtonsController != null) {
_zoomButtonsController.setVisible(true);
}
该应用程序似乎可以正常工作,直到我退出,此时我得到:
D/Solaris (22616): onDestroy() E/WindowManager(22616): Activity com.tomoreilly.solarisalpha.SolarisAlpha has leaked window android.widget.ZoomButtonsController$Container@4495c640 that was originally added here
堆栈跟踪指向
onTouchEvent
中调用_zoomButtonsController.setVisible(true)
的行。为什么是这样?为什么将缩放按钮控制器设置为可见也将其注册为意图侦听器?我该如何取消注册呢?我实际上是否在使用正确的方法-即应该从
ZoomButtonsController.setVisible(true)
内调用Activity.onTouchEvent()
吗?谢谢,
汤姆
最佳答案
您为什么提到IntentReceivers?日志显示您泄漏了一个窗口。您必须确保在退出时将缩放控制器的可见性设置为false,以销毁关联的窗口。