每当用户触摸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()
吗?
谢谢, 汤姆
答案 0 :(得分:3)
你为什么提到IntentReceivers?日志说你泄漏了一个窗口。您必须确保在退出时将缩放控制器的可见性设置为false以销毁关联的窗口。
答案 1 :(得分:0)
将此添加到您的活动中:
@Override
public void finish() {
ViewGroup view = (ViewGroup) getWindow().getDecorView();
view.removeAllViews();
super.finish();
}