2011-03-27 86 views
10

我有幾個活動的應用程序,例如:如何關閉我的應用程序的所有活動?

活動1 - >活動2 - >活動3 - >活動4

而且我想關閉所有從活動任何活動,並回到家裏的電話。

+0

請檢查我的答案在這裏:http://stackoverflow.com/questions/9426346/how-to-kill-all-activities-in-android-application/14393598#14393598 – 2013-01-18 08:47:49

+0

我更喜歡這個解決方案,因爲它比「KillReceiver」解決方案。 – TommyTh 2014-01-29 07:09:38

+0

檢查我的答案[這裏] [1]我希望它是有益的 [1]:http://stackoverflow.com/questions/14001963/finish-all-activities-at-a-time/ 24833606#24833606 – 2014-07-18 20:55:27

回答

20

您可以通過使用BroadcastReceivers實現這一目標:

  • 創建BaseActivity這樣的:

public class BaseActivity extends Activity { 
    private KillReceiver mKillReceiver; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     mKillReceiver = new KillReceiver(); 
     registerReceiver(mKillReceiver, 
      IntentFilter.create("kill", "spartan!!!")); 
    } 
    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     unregisterReceiver(mKillReceiver); 
    } 
    private final class KillReceiver extends BroadcastReceiver { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      finish(); 
     } 
    } 
} 

  • 讓你的活動延長該BaseActivity
  • 每當你想清除棧:

Intent intent = new Intent("kill"); 
intent.setType("spartan!!!"); 
sendBroadcast(intent); 

+6

請不要建議人們爲'Intent'或'IntentFilter'使用廢話/非法MIME類型。動作字符串可以做得足夠獨特,如果您擔心唯一的動作字符串不足,您可以在更新版本的Android上使用'setPackage()'。 – CommonsWare 2011-03-27 23:35:13

+0

你是對的,謝謝你的建議:) – Cristian 2011-03-27 23:38:18

+3

的動作可以殺死,但如果使用的內容的例子可能是更好://斯巴達,因爲它不會崩潰:-)我 – neteinstein 2011-03-30 16:39:50

2

而且我想從任何活動

That is user-hostile in Android關閉所有活動。請不要這樣做。

,回到家裏的電話

我不知道這意味着什麼。

如果用戶按下HOME,您的活動可以並且應該保留在RAM中一段時間​​,以防用戶返回到您的應用程序。

如果通過「家庭電話」表示您的某個活動是應用程序的「主頁」,並且您希望在用戶按下某個按鈕或選項菜單項時返回該活動,請調用startActivity()的意圖是:

  • 標識要返回
  • 活動具有標誌FLAG_ACTIVITY_CLEAR_TOP|FLAG_ACTIVITY_SINGLE_TOP,以表明你希望把該活動的前向和擺脫用戶以前推出的其他活動的
+0

FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_SINGLE_TOP它不是在我的情況下工作。請幫幫我。 – 2013-01-31 07:31:13

+2

@BorntoWin:點擊右上角的「提問」按鈕,在你的問題正是* *什麼「不是我的情況下工作」的意思解釋,無論是「不工作」和「在我的情況」部分。 – CommonsWare 2013-01-31 13:52:41

3

打開AndroidManifest。XML和發現你想返回並添加以下的屬性

android:launchMode="singleTask" 

例如活動,HomeActivity類可能有這樣的Android清單

<activity android:name=".HomeActivity" 
    android:launchMode="singleTask"/> 

在任何時候,你可以關閉所有在這一個使用startActivity的標準方式的熱門活動,例如

startActivity(new Intent(this, HomeActivity.class)); 

如果您通常通過羣衆演員的意圖,也沒有必要做這個作爲它會以任何以前的狀態回來,甚至伴隨着一個像後退按鈕一樣的動畫。

5

您可以使用以下標誌清除所有以前的活動:

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); 

我希望它會幫助你的!

相關問題