我发现大多数应用在点击启动器图标时都会恢复上次活动。然而,这似乎不是默认行为。在我的应用程序中,无论何时点击启动器图标,启动器活动始终会启动。
那么,我该如何配置我的应用程序,使其在已经运行时点击启动器图标后仍然恢复上次的活动呢?
我发现大多数应用在点击启动器图标时都会恢复上次活动。然而,这似乎不是默认行为。在我的应用程序中,无论何时点击启动器图标,启动器活动始终会启动。
那么,我该如何配置我的应用程序,使其在已经运行时点击启动器图标后仍然恢复上次的活动呢?
我不敢说这是一个错误,但自从第一个Android版本以来,这种行为就一直存在。当您从启动器启动应用程序时,在发布版本中存在任务和根任务的问题。您可以在此处找到相关的错误报告here。
可以通过在启动器活动的onCreate中添加以下代码来解决该问题:
if (!isTaskRoot()) {
finish();
return;
}
android:launchMode="singleInstance"
添加到manifest文件中的应用标签中来解决问题。
你可以在以下链接中查看有关launchmode的详细信息:
android:launchMode。这可能是一个丑陋的方法,但你可以尝试以下方式:
在你的Application子类中(或者任何单例),设置一个静态变量名为lastStopped。默认情况下将其设置为null。
在你的第一个Activity的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,以防止内存泄漏。
如果这对您有用,请告诉我,它对我有效!
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...
}
你确定你没有退出应用程序吗?另请参阅Activity Stack。
startActivity
还是 startActivityForResult
? - rekire
isTaskRoot
在 Activity B 中返回 true,但在 OnePlus one 上不是这样。因此应用程序只在启动时关闭。我使用了一个private static boolean isRunning
,并在 onCreate 中检查它是否为 true。如果不是,则将其设置为 true,否则完成。在 finish() 中将其设置为 false。 - Rishabh876intent.data == null
也是有意义的。虽然我没有测试过,但如果应用程序是从链接启动而不是从启动器图标启动,则intent.data将始终具有深层链接数据。 - NeverwinterMoon