2012-03-20 43 views
1

我開發與鈦的Android應用程序,Android SDK中1.8.0.1.In我的應用程序有三個tabs.Every時間當我點擊選項卡我的窗口得到refreshed.So我的代碼結構看起來像:火災事件多次執行。鈦的Android

////// on tab click ///////////////////// 
var explore = Titanium.UI.createWindow(
{ 
    //navBarHidden:true, 
    backgroundColor:'#f8f8f8' 
});explore.open({animated:true}); 

    ////// m.js ///////////////// 
var explore = Titanium.UI.currentWindow; 
Ti.App.addEventListener('feed_partial_action',function(e) 
{ 
    alert('inside event') 
}) 
var new = Titanium.UI.createButton(
{ 

});explore.add(new); 
new.addEventListener('click', function(e) 
{ 
    var explore_new = Titanium.UI.createWindow(
    { 
    navBarHidden:true, 
    backgroundColor:'#f8f8f8' 
    });explore_new.open({animated:true}); 

}); 

    /////// explore_new.js///////////////// 
var explore_new = Titanium.UI.currentWindow; 
Ti.App.fireEvent('feed_partial_action',{page_type:'new'}); 

所以我的問題是,第一次加載警報內部事件列表中的m.js執行一次,但是當我再次調用m.js它顯示警報兩次。第三次它顯示警報3次等,一段時間後強烈關閉應用程序。我認爲窗口的事件監聽器仍然在刷新widow後打開。那麼有沒有什麼辦法來解決這個問題。謝謝

+0

你如何通過你的窗口的標籤?爲什麼你每次探索開放窗口? – 2012-03-20 07:48:35

+0

在標籤上單擊我正在執行打開的窗口。我只是編輯問題。 – nilkash 2012-03-20 07:56:22

+0

這是一個要求嗎?因爲如果您使用選項卡,則無需打開窗口。只需將窗口對象傳遞給選項卡。 – 2012-03-20 08:50:21

回答

4

你在這裏有什麼是內存泄漏。 當您與

Ti.App.addEventListener('feed_partial_action',function(e) 
{ 
    alert('inside event') 
}); 

這個匿名函數存儲在Ti.App範圍內的語句添加事件監聽器Ti.App(它必須保留函數的引用,以便它可以在調用它「feed_pa​​rtial_action」事件被觸發)。直到Ti.App發佈它的引用之後,該函數纔會被垃圾收集。此外,它仍然與事件掛鉤。

有幾種方法可以解決這個問題。我不知道如何告訴你如何解決你的問題,因爲我沒有很多上下文提供的代碼示例。所以,這裏有一些解決方案。如果以下假設之一不正確,請詳細說明。

  • 如果「feed_pa​​rtial_action」事件是真正應該有一個且只有一個事件處理全球性事件,移動 Ti.App.addEventListener('feed_partial_action',function...);代碼被執行多次塊之外。
  • 如果您需要在探索窗口關閉時停止接收事件,請將eventHandler函數(匿名函數)移出到指定函數或變量,並在關閉窗口時調用Ti.App.removeEventListener('feed_partial_action', myFunction);。要做到這一點,最簡單的方法是

    function feedPartialActionCB(e) { alert('inside event'); } 
    Ti.App.addEventListener('feed_partial_action', feedPartialActionCB); 
    explore.addEventListener('close', function() { 
        Ti.App.removeEventListener('feed_partial_action', feedPartialActionCB); 
    });