我正在尝试修复代码中的错误,希望有人能指出我正确的方向。如果我的应用程序进入后台,并且用户只需进入“应用程序”并选择我的应用程序即可恢复,一切正常。
然而,如果他们把它放到后台并通过按住主页按钮恢复它,并从最近的应用程序列表中选择它,我会收到一个错误。我觉得这两个动作应该做完全同样的事情?
有谁知道从正常的应用程序列表恢复应用程序与通过按住主页按钮然后从该列表中选择它来恢复它之间的区别是什么?
答案 0 :(得分:5)
确切的答案取决于主屏幕或启动器应用程序的实现。但是,从我到目前为止的经验来看,我很确定......
...从菜单或主屏幕启动的应用通常由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"
)
...查看recent tasks根据我的意见,这种方式有所不同:任务列表最有可能依赖于getRecentTasks()创建的列表,并将所选应用程序带到面前。这可以通过使用moveTaskToFront()来完成。只有在应用程序/活动完成后才会重新创建(尝试终止应用程序,您将看到它已重新创建)。
结论:正如您所看到的,最近的任务列表非常像(go)返回应用程序,可能导致onResume()
,而从菜单启动应用程序将导致{ {1}}。
注意:一个应用程序包可能包含多个应用程序。 Contacts 和 Phone 应用程序在很多情况下只是一个提供的应用程序包中的两个不同活动(即APK文件)。
希望这有助于理解不同的行为......干杯!