应用程序始终从根活动开始,而不是恢复背景状态(已知错误)

Mon*_*eur 48 resume android task android-activity

我正面临这些链接中提到的问题:

http://code.google.com/p/android/issues/detail?id=2373

http://groups.google.com/group/android-developers/browse_thread/thread/77aedf6c7daea2ae/da073056831fd8f3?#da073056831fd8f3

http://groups.google.com/group/android-developers/browse_thread/thread/2d88391190be3303?tvc=2

我有一个简单的根活动与LAUNCHER和MAIN意图,没有别的.我开始另一个活动,在清单中没有任何标志或任何额外东西.

我启动应用程序(root活动),然后从那里开始第二个活动.按Home(主页)按钮后,任务将进入后台.在再次启动应用程序时(从Launcher或按住最近应用程序的Home按钮),它会在现有堆栈的顶部启动根活动的新实例.

如果我按下后退按钮,新的"root"活动将关闭,旧的第二个活动将可见,这意味着它将在同一任务中启动根活动,而不是将任务带到前台.

为了解决这个问题,我做了root活动的启动模式singleTask.现在,当我按下主页并再次启动应用程序时,它会清除旧的根任务上方的活动,并将旧的根任务带到前台,而不是仅将第二个活动的整个旧任务放在最前面.请注意,旧的根任务仍保留其应用程序状态,这意味着它不是新实例,但已杀死较高的活动.

它甚至发生在从市场上下载的其他应用程序中.手动安装方法对我没有影响,它仍然以相同的方式启动.

Sac*_*ani 62

    @Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) { 
        // Activity was brought to front and not created, 
        // Thus finishing this will get us to the last viewed activity 
        finish(); 
        return; 
    } 

    // Regular activity creation code... 
} 
Run Code Online (Sandbox Code Playgroud)

  • 这是如此迟钝 - 不是你的解决方案,而是问题的开始. (6认同)
  • 没有为我工作,所以我把`android:launchMode ="singleInstance"`更改为`android:launchMode ="singleTask"`并且它有效:) (5认同)

Lan*_*nek 25

这是因为用于启动应用程序的意图不同.Eclipse使用没有操作且没有类别的intent启动应用程序.Launcher使用android.intent.action.MAIN动作和android.intent.category.LAUNCHER类别的intent启动应用程序.安装程序使用android.intent.action.MAIN操作启动应用程序,没有类别.

提交bug的人应该把它作为对Eclipse插件增强的请求,因为他们显然希望Eclipse能够伪装成启动器并使用与启动器相同的意图启动应用程序.

  • 然而问题是,即使直接从手机启动应用程序,这种情况仍然存在...... (2认同)

ton*_*oni 5

这是解决方案:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0 & getIntent().getExtras() == null) {
        finish();
        return;
    }

 Your code....
}
Run Code Online (Sandbox Code Playgroud)

编辑:我有新的意图和通知的问题.以前的解决方案不适用于通知和意图...