2013-10-07 103 views
8

我有這樣一段代碼如何在Delphi-XE5 Firemonkey應用程序中關閉android應用程序?

procedure TFormMain.FormCloseQuery(Sender: TObject; var CanClose: Boolean); 
var 
    msg: String; 
begin 
    msg := 'Do you really want to exit?'; 

    if MessageDlg(msg, TMsgDlgType.mtConfirmation, 
    [TMsgDlgBtn.mbYes, TMsgDlgBtn.mbNo], 0) = mrNo then 
    CanClose := False 
    else 
    CanClose := True; { FIXME: don't want to work on Android } 
end; 

它完美的Windows。如果我選擇「是」,應用程序將關閉。但是,應用程序不會在Android上關閉。我做錯了什麼?

回答

13

當最後一個窗體關閉時關閉應用程序是Windows的事情。 Android應用將繼續運行。

要關閉Android上的應用程序,請撥打FMX.Helpers.Android設備的SharedActivity.finish

+2

還是'FMX.TApplication.Terminate()'方法,這也完成在Android活動(以及做其他平臺上的等效操作)。 –

+0

@Remy On'XE7'對我來說,'Application.Terminate'在Android設備上進行調試時會在IDE中返回大量錯誤消息。 –

+0

@JerryDodge:比如? –

0

調用暫停也關閉應用程序。

+1

使用暫停時,執行路徑立即停止。你終於在嘗試...最後的聲明不會被調用。你的窗體的OnClose不會被調用,等等。 –

+0

謝謝Marcus。 順便說一下,我在使用TGuestureManager的應用程序中嘗試了SharedActivity.finish,但沒有關閉應用程序。它仍然在運行的應用程序列表中。而且,當我嘗試激活它時,它會掛起。我錯過了什麼嗎? 當我在調試器模式下運行它。我在TGuestureManger中獲得例外,第一行通知通知。 –

+0

您還有其他活動在運行嗎? –

7
uses 
    FMX.Platform.Android; 

procedure TForm2.SpeedButton1Click(Sender: TObject); 
begin 
    MainActivity.finish; 
end; 
1

我試過所有的組合。

- SharedActivity.Finish - NOT WORKING FOR ME 
- MainActivity.Finish - NOT WORKING FOR ME 
- Application.MainForm.DisposeOf - NOT WORKING FOR ME 

這是爲我工作:

FreeAndNil(Application); 
+2

這是殺死你的應用程序的殘酷方式。 – naXa

+0

確保FMX.Platform.Android已正確聲明。 – Machado

+0

你嘗試過'FMX.Application.Terminate()'嗎? –