![](/img/trans.png)
[英]Android - How to resume the last activity when launched icon is clicked or when back button is clicked
[英]Resume last activity when launcher icon is clicked
正如我所看到的,当点击启动器图标时,大多数应用程序恢复上次活动。 但是,这似乎不是默认行为。 在我的应用程序中,启动器活动始终在单击启动器图标时启动。
当单击启动器图标并且应用程序已在运行时,如何配置我的应用程序以恢复上次活动。
我没有资格说这是一个bug,但是自第一个Android版本以来,这种行为一直存在。 从启动器启动应用程序时,发布版本中的任务和roottasks存在问题。 您可以在此处找到相关的错误报告。
可以修复以下代码添加到您的启动器活动的onCreate:
if (!isTaskRoot()) {
finish();
return;
}
我遇到了同样的问题,并通过将android:launchMode="singleInstance"
添加到清单中的应用程序标签来解决它。 您可以在中查看有关launchmode的详细信息
您可以测试标志: FLAG_ACTIVITY_BROUGHT_TO_FRONT
以捕获活动被带到前面但未创建的情况。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
finish();
return;
}
// Regular activity creation code...
}
你确定不退出你的应用程序吗? 另请参见活动堆栈 。
这取决于您的活动的生命周期。 请参阅Android Developer站点中的“活动生命周期” 。 如果您的活动刚刚暂停,它将在活动返回到前台时恢复,因此如果您单击该图标也是如此。
如果您希望让用户继续执行上一个活动,即使活动已被销毁,那么您必须编写自己的解决方案以获得正确的活动。
这是一个丑陋的黑客攻击,但您可以尝试以下方法:
在您的应用程序子类(或任何单例)中放置一个名为lastStopped的静态变量。 默认情况下将其设置为null。
在你的第一个活动的onCreate中你会有这样的东西:
if (MyApp.lastStopped != null) {
Intent intent = new Intent(this, MyApp.lastStopped.getClass());
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
finish();
return;
}
现在任何想要在回家后返回的活动都应该:
@Override
protected void onStop() {
super.onStop();
MyApp.lastStopped = this;
}
确保在启动另一个活动时清除MyApp.lastStopped以防止内存泄漏。
让我知道这是否适合你,它对我有用!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.