2011-03-27 44 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); 

我希望它会帮助你的!

相关问题