如何杀死我在android中的所有活动?

时间:2013-01-07 14:40:49

标签: android android-activity android-manifest

我正在开发一个几乎没有A,B,C,D等视图的Android应用程序。这里D是我的家庭活动。我的导航类似于A-> B-> C-> D。一旦我到达活动D,当我尝试按下后退按钮时,所有先前的活动(A,B,C)应该关闭。我不能像称为呼叫新活动的结束那样开始活动。请提供一种方法来杀死我的申请活动。

这里我使用了一些代码来完成所有活动,但没有得到结果。

ActivityManager manager =  (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
List<RunningAppProcessInfo> list = manager.getRunningAppProcesses();

if(list != null)
{
    for(int i=0;i<list.size();++i) {
        if(getApplicationContext().getPackageName().matches(list.get(i).processName)) {
            int pid = android.os.Process.getUidForName(getApplicationContext().getPackageName());
            android.os.Process.killProcess(pid);
        } 
        else {
            debug.log("app not killed");
        }
    }
}

所以请建议我一次关闭所有活动的正确方法。

先谢谢

7 个答案:

答案 0 :(得分:3)

完成它:

   Activity_name.this.finish();

为了杀人:

  android.os.Process.killProcess(android.os.Process.myPid());

答案 1 :(得分:1)

您可以通过两种方式执行此操作:

  1. 当您从活动A开始B活动时,您可以通过这种方式设置标志

    Intent i = new Intent(A.this, B.class);
    i.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
    startActivity(i);
    
  2. 并从B到C以及从C到D

    进行相同的操作

    1. 开始活动后致电finish()
    2. 这将启动活动B并完成活动A,因此当您单击后退时,您将不会返回A活动。

          Intent i= new Intent(A.this, B.class);
          startActivity(i);
          finish();
      

答案 2 :(得分:0)

在Activity_D的onPause()中设置了public static boolean kill = true;

之类的标记

现在在活动A,B,C的onResume()检查是否杀人,然后拨打finish();

onResume() {
    super.onResume();
    if(Activity_D.kill) {
        finish();
    }
}

答案 3 :(得分:0)

我对同样问题的解决方法:

声明一个带有活动堆栈的单例,以及一个公共静态clearAll方法,它迭代堆栈,完成所有活动。

然后,我宣布一个StackedActivity扩展Activity,它将在我的应用程序的所有活动中使用。

在StackedActivity onCreate方法中,我将实例添加到堆栈单例中,当我想完成所有操作时,只需调用clearAll方法。

答案 4 :(得分:0)

感谢所有回答我问题的人。最后,我得到了我的问题的解决方案。我通过使用意图Intent.FLAG_ACTIVITY_CLEAR_TOP解决了这个问题。这是我的方案的解释。 假设我在活动D中。我的实际流程是A-> B-> C-> D.i想要杀死我先前的活动A,B,C。当我从活动D开始时,我曾经打电话给我的第一个活动A. 所以我添加了意图FLAG_ACTIVITY_CLEAR_TOP来调用活动A.所以中间活动将被清除,并且只会显示活动A.而且我将一些标志值作为意图额外传递给活动A.这样

Intent intent = new Intent(D.this,A.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                intent.putExtra("finishstatus", true);
                this.startActivity(intent);
                this.finish();

我正在检查活动A的onCreate方法中的包值

bundle = this.getIntent().getExtras();
        if(bundle!= null)
        {
            boolean isActivityToBeFinish = this.getIntent().getExtras().getBoolean("finishstatus");
            if(isActivityToBeFinish)
            {
                finish();
                }
    }

如果状态值可用且为真,那么我也完成了活动A.所以我的问题已经解决,我成功地完成了之前的所有活动。

可能是我的解释不好但会完美。

答案 5 :(得分:0)

完全完成申请

我认为您使用的是启动器 - 活动或您的MainActivity来自您不希望恢复应用程序

1.完成您的活动 2.android:excludeFromRecents="true"在清单

答案 6 :(得分:0)

使用 finishActivity() 开始活动后