2010-08-09 61 views
1

我希望我的應用程序在用戶觸摸GLSurfaceView時在GLSurfaceView上顯示ZoomButtonsController。我的活動構造是這樣的:泄漏IntentReceiver android.widget.ZoomButtonsController?

_zoomButtonsController = new ZoomButtonsController(_surface); 
_zoomButtonsController.setAutoDismissed(true);    
_zoomButtonsController.setOnZoomListener(_zoomListener); // Set listener 

然後我重寫onTouchEvent()使ZoomButtonsController可見當用戶生成一個ACTION_MOVE事件:

/** 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 [email protected] that was originally added here 

和堆棧跟蹤是指線onTouchEvent其中_zoomButtonsController.setVisible(true)被調用。

這是爲什麼?爲什麼設置縮放按鈕控制器可見也會將其註冊爲意圖偵聽器?我怎麼取消註冊?我是否真的採用了正確的方法 - 即是否應該在Activity.onTouchEvent()之內撥打ZoomButtonsController.setVisible(true)

感謝, 湯姆

回答

3

你爲什麼要提IntentReceivers?日誌說你泄露了一個窗口。您必須確保在退出時將變焦控制器的可見性設置爲false,以銷燬關聯的窗口。

+0

感謝蓋伊 - 是的,調用ZoomButtonsController.setVisible(假)內Activity.onDestroy()解決眼前的問題。但我不明白爲什麼。有人可以請參閱ZoomButtonsController用法的完整示例嗎?我一直無法找到一個。 – Tom 2010-08-09 15:13:43

+0

由於縮放控制器會創建一個窗口,因此您必須銷燬該窗口。 – 2010-08-09 16:54:34

+0

Yikes - 我忽略了API中的一個聲明 - 它正好在我的面前:「如果您使用的是自定義視圖,請從onDetachedFromWindow()調用setVisible(false)。」多謝你們。 – Tom 2010-08-11 03:38:39

0

添加到您的活動:

@Override 
    public void finish() { 
     ViewGroup view = (ViewGroup) getWindow().getDecorView(); 
     view.removeAllViews(); 
     super.finish(); 
    }