离开时如何杀死Android活动,以使其无法通过“后退”按钮进行访问?


130

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

如何做到这一点的最佳方法?用户启动新活动后,如何立即杀死或销毁该活动?


检查这个答案,对我有用。
Daniyar

Answers:


234

你只需要打电话 finish()

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

谢谢。为了更进一步,我从一个对话窗口开始新的活动-代码会以相同的方式工作吗?
JohnRock

@CaseyB对此表示感谢。但是我想知道,如果可以的话,我可以从服务中调用此方法吗?
swiftBoy 2012年

1
服务没有活动,这意味着它们将不在活动堆栈中返回。如果您想终止服务中的某些活动,则应该可以调用myActivity.finish();。
CaseyB 2012年

3
它的答案已有7年历史了,但仍然适用于Android M和
N。– zeeshan

1
@juztcode onDestroy是一个生命周期方法,只能从Android框架中调用。
CaseyB

106

android:noHistory="true"在清单中的活动上进行设置会在每次将活动从导航中移出时将其从堆栈中删除。看这里



8

您也可以在中添加android:noHistory="true"Activity标签AndroidManifest.xml

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

7

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


4

初始化新的意图后,将其写在每个“新活动”中

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

2

终于,我找到了解决方案!

我的上下文是:-当活动被破坏时,我想断开套接字连接,我尝试完成()活动,但对我没有用,它的连接保持在某个地方。

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


1
这个解决方案对我有用,但是不幸的是显示空白页,要关闭套接字连接,可以使用socket.close();。。
Mehrdad

android.os.Process.killProcess(android.os.Process.myPid())杀死应用程序进程,而不仅仅是活动。这意味着任何正在进行的服务(后台或前台)也将被停止。
Wrichik Basu


0

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

startActivity(new Intent(this, newactivity.class));
finish();
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.