离开时如何杀死Android活动,使其无法从后退按钮访问?

Posted

技术标签:

【中文标题】离开时如何杀死Android活动,使其无法从后退按钮访问?【英文标题】:How to kill an Android activity when leaving it so that it cannot be accessed from the back button? 【发布时间】:2011-02-02 18:05:13 【问题描述】:

在给定的 android 活动中,我想在某个时候为用户启动一个新活动。一旦他们离开第一个活动并到达第二个活动,第一个活动就过时了,我想将其完全删除,这样就无法从后退按钮再次访问它。

实现这一目标的最佳方法是什么?如何在用户启动新活动后立即终止或销毁此活动?

【问题讨论】:

检查这个answer,它对我很有用。 【参考方案1】:

您只需拨打finish()

Intent intent = new Intent(this, NextActivity.class);
startActivity(intent);
finish();

【讨论】:

谢谢。更进一步,我从对话窗口开始新活动 - 代码会以同样的方式工作吗? @CaseyB 谢谢你..但我想知道,如果是的话,我可以从服务中调用这个方法吗? 服务没有活动,这意味着它们不会在活动堆栈中返回。如果你想从你的服务中终止一些活动,你应该可以调用 myActivity.finish(); 这是一个已有 7 年历史的答案,但仍然适用于 Android M 和 N。 @juztcode onDestroy 是一个生命周期方法,只能从 Android 框架调用。【参考方案2】:

在清单中的 Activity 上设置 android:noHistory="true" 将在导航离开时从堆栈中删除该 Activity。见here

【讨论】:

【参考方案3】:

你可以使用:

intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);

【讨论】:

有趣! “FLAG_ACTIVITY_NO_HISTORY”到底是什么意思?【参考方案4】:

您还可以将android:noHistory="true" 添加到AndroidManifest.xml 中的Activity 标记中。

<activity
            ...
            android:noHistory="true">
</activity>

【讨论】:

【参考方案5】:

是的,您需要做的就是在您想要关闭的任何 Activity 中调用 finish()。

【讨论】:

【参考方案6】:

在初始化新意图后,在每个“新活动”中写入 ->

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

【讨论】:

【参考方案7】:

终于有办法了!

我的上下文是:- 我想在活动被破坏时断开套接字连接,我尝试 finish() 活动,但它对我不起作用,它保持连接有效某处。

所以我使用android.os.Process.killProcess(android.os.Process.myPid()); 它杀死了我的活动,我使用了android:excludeFromRecents="true" 从最近的活动中删除。

【讨论】:

这个解决方案对我有用,但不幸的是显示一个空白页并关闭套接字连接,您可以使用 socket.close(); . android.os.Process.killProcess(android.os.Process.myPid()) 会杀死应用程序进程,而不仅仅是 Activity。这意味着任何正在进行的服务(后台或前台)也将停止。【参考方案8】:

将此属性添加到清单文件中的活动。 android:noHistory="true"

【讨论】:

【参考方案9】:

在 Kotlin 中,你可以使用这个

startActivity(Intent(context, newActivity::class.java))
finish()

或者你也可以使用它

val intent = Intent(context, newActivity::class.java))
startActivity(intent)
finish()

【讨论】:

【参考方案10】:

您有以下选项可以从特定任务的后台堆栈中删除活动。

    startActivity() 之后调用finish() 方法,如下所示:

         startActivity(new Intent(FirstActivity.this, SecondActivity.class));
         finish();
    

    像这样添加一个 Intent 标志:

         startActivity(new Intent(FirstActivity.this, SecondActivity.class).addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY));
    

    在您的清单文件中为该特定活动添加 noHistory=true

【讨论】:

【参考方案11】:

您只需要在启动新活动时使用以下代码。

startActivity(new Intent(this, newactivity.class));
finish();

【讨论】:

以上是关于离开时如何杀死Android活动,使其无法从后退按钮访问?的主要内容,如果未能解决你的问题,请参考以下文章

相机打开时如何释放相机?

Android Fragment句柄后退按钮按下[重复]

如何设置多个父活动以使用android后退按钮

Android:如何知道高级任务杀手杀死的活动/服务?

用户杀死Android应用后保存状态

Android - 从CH Play打开时恢复应用程序