当用户通过点击主屏幕启动器打开应用时,Android如何确定要恢复的活动/任务?首先从Package安装程序启动应用程序,然后从Home Screen Launcher启动应用程序时遇到问题。
步骤:
问题:
MainActivity出现在堆栈两次。使用该应用程序的任何人都需要按两次后退按钮才能退出。我已经能够使用Android Studio中的“新建项目”向导成功重现此项,并进行了以下更改:Min SDK = 14,Target SDK = 17,Compile SDK = 17)。
使用dumpsys(adb shell dumpsys activity),我在运行Package安装程序后记录了堆栈,并在从Home Screen Launcher启动应用程序时再次记录。
点击"打开"从包安装程序:
Task id #99
TaskRecord{424f0e10 #99 A=com.example U=0 sz=1}
Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 pkg=com.example cmp=com.example/.MainActivity }
Hist #0: ActivityRecord{4231c6e8 u0 com.example/.MainActivity t99}
Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 pkg=com.example cmp=com.example/.MainActivity }
ProcessRecord{42458650 16816:com.example/u0a294}
按主页按钮后,从主屏幕启动器启动应用程序:
Task id #99
TaskRecord{424f0e10 #99 A=com.example U=0 sz=2}
Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 pkg=com.example cmp=com.example/.MainActivity }
Hist #1: ActivityRecord{431e05b8 u0 com.example/.MainActivity t99}
Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10600000 cmp=com.example/.MainActivity }
ProcessRecord{42458650 16816:com.example/u0a294}
Hist #0: ActivityRecord{4231c6e8 u0 com.example/.MainActivity t99}
Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 pkg=com.example cmp=com.example/.MainActivity }
ProcessRecord{42458650 16816:com.example/u0a294}
很明显,主屏幕启动器会在从主屏幕启动时恢复现有的MainActivity。 这是我最初的假设。我认为Home Screen Launcher会检测现有的活动并恢复该任务。
我已经在Android 4.0.4(三星Galaxy GT-N7000)和Android 4.4.2(HTC One)上对此进行了测试,并看到相同的结果。
对于此问题的解决方案或解决方法的任何帮助,以及描述此Android行为的任何文章/文档,将不胜感激。
答案 0 :(得分:3)
你并不孤单。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
finish();
return;
}
}
请参阅以日文撰写的http://gosyujin.github.io/2013/08/04/android-install-intent。 这对我有用。