Android 如何使活动停止,而不是被销毁,从后退键?
现在,当按下后退键时,活动将被销毁。我如何使它停止(即保持所有变量等处于活动状态),而不是被销毁 谢谢 这与前面的问题类似 希望这有帮助!Android 如何使活动停止,而不是被销毁,从后退键?,android,Android,现在,当按下后退键时,活动将被销毁。我如何使它停止(即保持所有变量等处于活动状态),而不是被销毁 谢谢 这与前面的问题类似 希望这有帮助! 注意按后退键触发活动类的onBackPressed回调方法。此回调的默认实现调用finish()方法 您可以替代此方法将活动移动到背景(模拟按HOME键的操作) 例如: 您还可以考虑这里提到的 MOVETASKTROBACKE()/: 为什么需要保持变量的活性?考虑到Android应用程序的既定生命周期,我不确定“仅仅为了保持变量”而防止活动被破坏是否有意
注意按后退键触发
活动
类的onBackPressed
回调方法。此回调的默认实现调用finish()
方法
您可以替代此方法将活动移动到背景(模拟按HOME键的操作)
例如:
您还可以考虑这里提到的<代码> MOVETASKTROBACKE()/<代码>:
为什么需要保持变量的活性?考虑到Android应用程序的既定生命周期,我不确定“仅仅为了保持变量”而防止活动被破坏是否有意义
首先,很抱歉没有回答这个问题,因为我仍然没有最佳答案。 但是,我真的很喜欢人们开始问“你需要这个做什么”。而且,很少有人问这个问题,真的应该问这样的问题。我想这次不是,但好吧,这不是问题 无论如何,我将试图指出为什么我们中的一些人相信这一点 从活动A转到活动B(基于一些数据获取创建UI)和 从B返回到A(销毁B中创建的所有UI和/或获取的数据)有时是一个糟糕的概念。更好的解决方案是保持堆栈不变,因此使用类似finish()的方法在活动B中,但将活动B保持在暂停状态,因此稍后从活动A再次调用时,它只进入onResume=在UI中没有重新创建任何内容,没有额外的数据获取。当然,额外的好处是快速响应的UI,区别在于如果您有更复杂的UI布局。简单的一行
@Override
public void onBackPressed() {
mActivity.moveTaskToBack(true);
}
我已经成功地解决了您想要的问题:使用“后退”按钮在两个活动之间切换,并保持它们不被破坏!
例如:您有两个活动A和B。A将首先启动,然后A调用B。当B加载时,用户按“后退”按钮并从B切换回活动A。从现在起,B不应被销毁,而应转到后台,当用户再次从A启动活动B时,活动B将被带到前台,而不是重新创建n或创建了新实例!
如何实现:
1.重写活动B的onBackPressed():
@Override
public void onBackPressed() {
Intent backIntent = new Intent(this, ActivityA.class);
backIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(backIntent);
}
2.关于活动A,请致电活动B:
public void callActivityB() {
Intent toBintent = new Intent(this, ActivityB.class);
toBIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(toBintent);
}
请记住在调用A&B时将flag:Intent.flag\u ACTIVITY\u REORDER\u添加到\u FRONT。只需在活动清单中指定为
android:persistent="true"
这应该可以防止你的活动被破坏。要了解更多信息,请参考我回复的以下链接
在上面的帖子中,我已经用一个类似的用例详细解释了,但是当按下后退键时,它会运行主活动。我只需要停止(即暂停并移动到后台,从而返回到以前的活动)什么/多少个变量?它们是如何被使用的?你可以考虑将它们设置为类变量,而不用担心保持这个活动。看看我的答案……但是,“MOVETASKToBeBuSE(true);”停止整个应用程序(即作为“家”按钮)。,而我只需要停止一个活动。不,不,只需要停止一个活动,而不是整个应用程序。:)我相信如果停止一个活动,就会失去它的上下文和所有局部变量。这就是你想要达到的目的。如果我错了,请纠正我。不是真的,如果我覆盖“后退”按钮,使其像“主页”按钮一样工作,当我再次启动应用程序时,内容仍然存在。问题是它会停止整个应用程序,而我只需要停止一个活动。:)谢谢,工作。。。只有一个细节,我应该如何让它知道是哪个活动启动了此活动,以便它知道返回到哪个活动?如果您只想返回到上一个活动,那么为什么“后退”按钮的正常功能不可接受?您可以通过将第一个活动的相关信息包含在用于使用Intent.putExtra(“活动名称”、“活动1”)启动第二个活动的Intent中,然后在第二个活动中检索该名称来确定第一个活动。但是,除非您在活动中做了一些非常不寻常的事情,否则将数据正确地保存在onPause()和onResume()中,而不重写
public void callActivityB() {
Intent toBintent = new Intent(this, ActivityB.class);
toBIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(toBintent);
}
android:persistent="true"