2009-10-15 199 views
1

我的屏幕從下面的OnClose()方法的屏幕所固有的:問題殺死定製黑莓應用程序的

public boolean onClose() 
    { 
     Dialog.alert("Closing"); 
     done = true; 
     System.exit(0); 

     return true; 
    } 

我有種假設System.exit(0);會真的殺死我的應用程序。

如果我點擊紅色按鈕完全退出,我確實收到了「關閉」對話框消息。如果我多次點擊後退按鈕,情況也是如此。但即使我得到「關閉」對話框,當我選擇「切換應用程序」時,仍然會看到我的應用程序在後臺運行。

不僅如此,如果我有一個線程正在運行,有時在退出應用程序後我仍然會看到它正在運行(這就是爲什麼我已經完成了變量集,以便在完成後我的線程會自動中止是真的)。最重要的是,如果應用程序崩潰,即使我設法完全離開應用程序,我也不會看到我的對話消息。如果我在應用程序崩潰後嘗試重新點擊它,它也不會重新加載。永遠。無論如何要妥善處理這種情況? (很顯然,我爲每一個我發現的問題都提供了錯誤處理,但是如果發生什麼事情,我至少希望應用程序不會繼續佔用內存)

黑莓應用程序永遠不會關閉嗎?難道我做錯了什麼?現在,如果我想讓我的應用程序停止運行,我必須徹底刪除它並重新安裝它!

回答

2

如果你正在擴展net.rim.device.api.ui.Screen(不是MainScreen或Screen的其他子項),那麼你應該專門設置DEFAULT_CLOSE風格或實現類似的調用close(),當屏幕應該是取下來每API文檔:

public boolean onClose() 

Indicates a close event has occurred. 

The default implementation is activated by specifying DEFAULT_CLOSE. It will call onSavePrompt() if the screen is dirty, then call close() if successful. 

Returns: 
    True if the screen closes; otherwise, false. 
Since: 
    JDE 3.6.0 

調用System.exit(0)都會導致您的應用程序退出但有可能保持在權衡實施,線程退出和畫面乾淨關閉。黑莓GUI應用程序退出的正常方式是當最後一個屏幕從顯示堆棧彈出時,在調用close()時發生。

+0

呀,抱歉沒有澄清。 Hrmm ...我認爲這就是System.exit(0)所做的......它讓我感到困惑,它不起作用。也許我的一些線程沒有正確退出,因此程序繼續運行....我會研究它,謝謝你的建議 – Jenny

+0

如果你仍然認爲你的線程沒有關閉,你可以嘗試確保「完成」是不穩定的,並在多餘的線程上調用join。 – Andres

1

不要叫System.exit(0);呼叫super.onClose();除非正如他所說的下方,我使用MainScreen您不overridding MainScreen

+0

Hrrm ...這有助於我回擊直到應用程序彈出所有屏幕的情況......有什麼辦法來處理用戶點擊紅色退出按鈕? – Jenny

+0

紅色(掛斷)按鈕的默認行爲是爲後臺應用程序。如果你希望它退出(不保存),那麼你可以跟蹤你的屏幕並在所有屏幕上調用close(),或者在當前屏幕上設置一個標誌調用close(),然後在onExposed()調用super.onExposed ()然後檢查標誌並有條件地調用close()。 – Richard