我正在尝试修复代码中的错误,并希望有人能指出我正确的方向。如果我的应用程序进入后台,用户只需进入“应用程序”并选择我的应用程序即可恢复,一切正常。
但是,如果他们将其置于后台并通过按住主页按钮并从最近的应用程序列表中选择它来恢复它,我会遇到一个错误。我的印象是这两个动作应该做完全相同的事情?
有谁知道从正常的应用程序列表中恢复应用程序与通过按住主页按钮然后从该列表中选择它来恢复它之间有什么区别?
我正在尝试修复代码中的错误,并希望有人能指出我正确的方向。如果我的应用程序进入后台,用户只需进入“应用程序”并选择我的应用程序即可恢复,一切正常。
但是,如果他们将其置于后台并通过按住主页按钮并从最近的应用程序列表中选择它来恢复它,我会遇到一个错误。我的印象是这两个动作应该做完全相同的事情?
有谁知道从正常的应用程序列表中恢复应用程序与通过按住主页按钮然后从该列表中选择它来恢复它之间有什么区别?
确切的答案在一定程度上取决于您的主屏幕或启动器应用程序的实施。然而,从我目前的经历来看,我很确定......
... 从您的菜单或主屏幕启动的应用程序通常由Intent
. 更准确地说:活动启动器在其菜单中显示具有操作android.intent.action.MAIN"
和类别的所有活动android.intent.category.LAUNCHER
,如果您选择一个应用程序,它会创建一个Intent
并由此启动应用程序:
Intent intent = new Intent(Launcher.context, SelectedActivity.class);
intent .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
这很可能会创建您启动的应用程序活动的新实例,除了一些可能避免这种情况的标志(android:launchMode="singleTop"
)
...查看最近的任务,据我所知,这会有所不同:任务列表很可能依赖于由getRecentTasks()创建的列表,并将选定的应用程序放在前面。这可以通过使用moveTaskToFront()来完成。只有当应用程序/活动已经完成时,它才会被新创建(尝试杀死应用程序,你会看到它被重新创建)。
结论:如您所见,最近的任务列表的工作方式更像是(返回)应用程序,可能会导致 .onResume()
而从菜单启动应用程序会导致onCreate()
.
注意:一个应用程序包可能包含多个应用程序。联系人和电话应用程序在许多情况下只是一个提供的应用程序包(即 APK 文件)中的两个不同活动。
希望这有助于理解不同的行为......干杯!