2013-05-10 61 views
8

我有2個活動,所以活動1去活動2,然後活動2我有一個退出按鈕。但是當我點擊它時,它只會退出活動編號2並再次返回活動1。它的基本感覺就像我剛開始再次申請。我不知道爲什麼?System.exit(0)不關閉我所有的活動?

這是我的代碼。

Button btExit = (Button) findViewById(R.id.btExit); 
    btExit.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      finish(); 
      System.exit(0); 
     } 
    }); 
+2

調用完成()工作。 – Anukool 2013-05-10 11:08:26

+0

http://stackoverflow.com/questions/2033914/quitting-an-application-is-that-frowned-upon。建議不要使用System.exit(0); – Raghunandan 2013-05-10 11:09:29

+1

@Anukool如果用戶按下回退鍵而不是按鈕,則不起作用。 – 2013-05-10 11:13:36

回答

43
System.exit(0); 

是Android應用程序的終止的好方法。 Android的管理它自己的操作系統

您可以通過其相應的意圖打開主頁應用:

Intent intent = new Intent(Intent.ACTION_MAIN); 
intent.addCategory(Intent.CATEGORY_HOME); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(intent); 

希望這有助於

編輯: -

話,我想你旨在完成所有堆積活動..

它在這裏: -

關閉所有的以前的活動如下:

Intent intent = new Intent(this, MainActivity.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.putExtra("Exit me", true); 
startActivity(intent); 
finish(); 

然後在MainActivityonCreate()方法添加此操作以完成在MainActivity

if(getIntent().getBooleanExtra("Exit me", false)){ 
    finish(); 
} 

結果將與上面相同,但因爲所有您的積累活動已關閉,當您回到您的應用程序時,它必須從您的主要活動即啓動程序活動開始。

希望這會有所幫助。

+0

moveTaskToBack(true) – 2013-05-10 11:19:31

+0

@MaciejGórski啓動HOME應用程序(或使用'moveTaskToBack()')不會更改此任務的當前狀態。這意味着,使用這個例子,當用戶從HOME屏幕再次啓動這個應用程序時,它會將現有任務(包含Activity1和Activity2)放回到前面並顯示用戶Activity2(可能是**不是** – 2013-05-10 12:17:31

+0

@DavidWasser我意識到這一點,這就是爲什麼我的回答是不同的。我的評論是爲了簡化CRUSADER和Nunu的回答。 – 2013-05-10 12:30:27

7

請勿使用System.exit

如果希望用戶能夠從我建議使用startActivityForResult任何Activity關閉應用程序,在第一ActivityonActivityResult檢查返回值和呼叫finish()有太多。

+1

爲什麼?完成不關閉應用程序,只關閉活動。人們試着瞭解我們有許多其他類不是來自Activity。它們可用於自動化數據庫連接,存儲登錄標識,用戶名,最後查詢結果...因此關閉活動不能解決生產環境中的問題。 Aaa,cześćMaciek;) – TomeeNS 2015-10-02 02:44:49

4

您可以模擬擊中home鍵:

Intent intent = new Intent(Intent.ACTION_MAIN); 
intent.addCategory(Intent.CATEGORY_HOME); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(intent); 

但這不會關閉應用程序 ..

關閉它,你可以做https://stackoverflow.com/a/9735524/1434631

+1

啓動HOME應用程序不會改變此任務的當前狀態。這意味着,使用這個例子,當用戶從主屏幕再次啓動這個應用程序時,它將把現有的任務(包含Activity1和Activity2)帶回到前面並顯示用戶Activity2(這可能不是OP想要的發生聯繫的解決方案更好。 – 2013-05-10 12:20:54

0

使用finish()和sharedPreference標誌並在單擊按鈕時設置標誌。在您的其他活動中,檢查標誌並在標誌設置完成後()

0

在傳遞意圖啓動下一個活動後,通過在按鈕上調用finish();完成第一個活動。

0

系統。出口(0)不會在您的活動1關閉應用程序startActivity(活性2)後

ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE); 
    am.killBackgroundProcesses("com.root.abc"); 

    System.runFinalizersOnExit(true); 
    System.exit(0); 


add Manifest permission 
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />