Android Home Screen Launcher如何恢复任务?

时间:2014-05-27 02:43:36

标签: android android-intent

当用户通过点击主屏幕启动器打开应用时,Android如何确定要恢复的活动/任务?首先从Package安装程序启动应用程序,然后从Home Screen Launcher启动应用程序时遇到问题。

步骤:

  1. 使用套餐安装程序,从APK安装应用程序。
  2. 安装后,从“程序包安装程序”中打开应用程序。
  3. 按主页按钮
  4. 在主屏幕中,点击应用图标
  5. 问题:

    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行为的任何文章/文档,将不胜感激。

1 个答案:

答案 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。 这对我有用。