2014-02-23 46 views
1

我有一個覆蓋SpenSurfaceView和Android佈局組件的屏幕。當用戶將屏幕切換到加載不同的組件,所述舊組件泄漏到這個類:從本地棧根據MATSpenInView的內存泄漏本地堆棧

com.samsung.android.sdk.pen.engine.SpenInView (內存分析器T)

疊加組件是自定義控制器,以筆劃的形式接收用戶輸入。他們有一個對SurfaceView的引用,但在刪除組件之前它是空的。

即使我完全退出應用程序,問題仍然存在。

我使用示例PenSample5_6_TextRecognition作爲參考。

這是使用三星移動SDK(http://developer.samsung.com/samsung-mobile-sdk

我應該採取什麼策略來繼續追此內存泄漏? SDK的NDK端可能是封閉源代碼。

SpenObjectBase是否保留對SpenSurfaceView的引用?

比我有更多聲譽的人可以創建「spen sdk」標籤嗎?

回答

0

請從示例應用程序中檢查onDestroy()。你關閉所有資源嗎?

@Override 
protected void onDestroy() { 
    super.onDestroy(); 

    if (mTextRecognition != null) { 
     mSpenTextRecognitionManager.destroyRecognition(mTextRecognition); 
     mSpenTextRecognitionManager.close(); 
    } 

    if (mSpenSurfaceView != null) { 
     mSpenSurfaceView.closeControl(); 
     mSpenSurfaceView.close(); 
     mSpenSurfaceView = null; 
    } 

    if(mSpenNoteDoc != null) { 
     try { 
      mSpenNoteDoc.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     mSpenNoteDoc = null; 
    } 
} 

樣品正在關閉onDestroy中的資源。用戶離開活動後可能會發生這種情況(即使設備沒有足夠的內存也不會發生)。考慮釋放中的資源,然後在onResume中重新創建它們。

最後,在我的代碼中,我刪除了註冊的回調 private void removeListeners(){ spenPageDocContainingNoteDoc.setObjectListener(null); try { spensBasicShapeConverter.setResultListener(null); }趕上(例外五){ .. }

當investingating堆轉儲,我看到我的活動(回調處理器)在SPEN API的一些數據結構內舉行。刪除監聽器可以消除內存泄漏。