1

我正在开发一个很少有 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");
        }
    }
}

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

提前感谢

4

7 回答 7

3

为了完成它:

   Activity_name.this.finish();

而对于杀戮:

  android.os.Process.killProcess(android.os.Process.myPid());
于 2013-09-04T12:04:35.567 回答
1

您可以通过两种方式做到这一点:

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

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

从 B 到 C 和从 C 到 D 做同样的事情

或者

  1. 开始活动通话后finish()

这将启动活动 B 并完成活动 A,因此当您单击返回时,您不会返回到 A 活动。

    Intent i= new Intent(A.this, B.class);
    startActivity(i);
    finish();
于 2013-01-07T15:50:45.293 回答
0

onPause()Activity_D 中设置一个标志,如public static boolean kill = true;.

现在在活动 A、B、C 中onResume()检查是否杀死,然后调用finish();

onResume() {
    super.onResume();
    if(Activity_D.kill) {
        finish();
    }
}
于 2013-01-07T14:46:54.667 回答
0

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

使用 Activity Stack 和 public static clearAll 方法声明一个单例,该方法迭代堆栈,完成所有活动。

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

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

于 2013-01-07T15:56:33.443 回答
0

感谢所有回答我问题的人。最后我得到了我的问题的解决方案。我通过使用意图 Intent.FLAG_ACTIVITY_CLEAR_TOP 解决了这个问题。这是我的场景的解释。假设我在活动 D。我的实际流程是 A->B->C->Di 想要杀死我以前的活动 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。这样我的问题就解决了,我成功地完成了之前的所有活动。

可能是我的解释不好,但会很好用。

于 2013-01-08T10:29:25.827 回答
0

完全完成申请

我认为您正在启动器活动或您的 MainActivity 从您不想恢复您的应用程序的地方

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

于 2014-10-14T06:35:23.600 回答
0

finishActivity() 开始活动后使用

于 2021-02-13T14:23:15.233 回答