离开时如何杀死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。 @juztcodeonDestroy
是一个生命周期方法,只能从 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活动,使其无法从后退按钮访问?的主要内容,如果未能解决你的问题,请参考以下文章