2011-08-31 57 views
1

它不建議直接退出應用程序,所以關鍵是使一切順利的背景和用戶返回到主屏幕完成所有活動。我的問題是我的主要活動,它總是與標誌Intent.FLAG_ACTIVITY_CLEAR_TOP推出| Intent.FLAG_ACTIVITY_SINGLE_TOP它推出另一項活動,在這裏我要放置退出按鈕。爲了把所有事情都背景化,我必須完成當前和主要活動。儘管如此,啓動主要活動時應使用這些標誌以及它應該退出的額外信息,但這樣做會帶來額外的影響,但是意圖提供的額外內容不會達到主要活動 - 它仍然會獲得android用來啓動應用程序的意圖。的Android出境申請

換句話說,我想是這樣的:

// Exit's onClick: 
Intent intent = new Intent(someContext, MainActivity.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
intent.putExtra("exit", true); 
context.startActivity(intent); 
currentActivity.finish(); 

// MainActivity onCreate: 
Bundle extras = getIntent().getExtras(); 
if (extras != null) 
{ 
    // application never reach this point 
    boolean exit = extras.getBoolean("exit"); 
    if (exit) 
    { 
    finish(); 
    return; 
    } 
} 

的額外交付。我怎樣才能使它工作?

致謝MainActivityAndroidManifest.xml文件

回答

0

設置啓動模式爲"SingleTop"如下:

android:launchMode="singleTop" 
+0

這並不能解決問題,更重要的是它還會導致更多的活動堆棧問題。 –

1
System.Exit(0); 

//你可以用它來退出整個應用程序,而不僅僅是一個活動

0

我不知道這是否是最好的解決辦法,但工作對我說:

在事件監聽器:

int pid = android.os.Process.myPid(); 
android.os.Process.killProcess(pid); 
0

簡單,做一個類,把一個靜態變量和函數是這樣的:

public static boolean isExit = false; 

public static boolean CheckExit() { 
return isExit; 
} 

public static void setisExit(boolean b) 
{ 
isExit = b; 
} 

而在你的主要活動YourClassName.setisExit(false);將確保isExit值在應用程序重新啓動時爲false。

退出:

OnClick方法將這個:

YourClassName.setisExit(true); 
finish(); 

,換上這OnResume方法的每一次活動的第一行:

if(YourClassName.CheckExit()) { 
    finish(); 
    return super.onResume(); 
    } 

通過每次都做一個活動的簡歷是檢查isExit值,如果爲true,則退出。

您可以在google play上查看我的應用E Player。我實施了這種方法並且工作正常

+0

當Android決定在恢復應用程序時從頭開始重新創建GUI時,靜態變量會丟失。您的解決方案不可靠。 –

+0

好的,但是一旦用戶點擊退出按鈕,現在用戶已經不在應用程序中,所以如果應用程序重新創建,它是否重要。沒有一次我或我的E播放器用戶覺得退出功能出錯。而持有這些靜態變量的類是一個單獨的類而不是活動 –