3

首先,我有两个活动:Splash 和 MainActivity(仅支持纵向)。在 MainActivity 中,我有很多片段使用 Slide 菜单。我想在用户离开 MainActivity 时保留当前片段。这是我的尝试:

  int currentFragment  = 0;

  public void onCreate(Bundle savedInstanceState) {
  if (savedInstanceState != null) {
        currentFragment = savedInstanceState.getInt(CURRENT_FRAGMENT_KEY, 0);
        switchContent(currentFragment);
    } else {
          // change fragment by index
        switchContent(0);
    }
 }

  @Override
protected void onSaveInstanceState(Bundle outState) {
    outState.putInt(CURRENT_FRAGMENT_KEY, currentFragment);
    Log.d("onSaveInstanceState" ," current fragment" + currentFragment);
    super.onSaveInstanceState(outState);
}

我的manifest

   <activity
        android:name="com.appiphany.auskills.activity.SplashActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
   <activity
        android:name=".activity.MainActivity" 
        android:screenOrientation="portrait" />    

当我使用调试键构建我的应用程序时一切都很好:按主页按钮,然后返回应用程序,它打开上一个片段。但是当我建立在发布模式(使用我的私钥,我不使用proguard)时,在 MainActivity 中按 HOME 按钮,然后再次打开应用程序,它从 SplashActivity 开始。我不知道这个奇怪的问题。我想试试这个,但它没有帮助:

   @Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    currentFragment = savedInstanceState.getInt(CURRENT_FRAGMENT_KEY, 0);
        switchContent(currentFragment);     
} 

有什么想法吗?

更新:我发现了另一个奇怪的问题:这个问题只发生在我从 apk 文件安装它时。安装后,手机会询问 2 个选项:DoneOpen。如果我按open,就会发生这个问题。当我通过任务管理器杀死应用程序,然后再次打开时,它可以正常工作。

4

1 回答 1

2

FLAG_ACTIVITY_NEW_TASK从 Splash 导航到 Main 活动时使用已修复问题。我只是想知道为什么它可以在调试模式下工作(从 apk 复制安装,如发布模式)。对于任何有同样问题的人,这是我的可行代码:

 Intent intent = new Intent(SplashActivity.this, MainActivity.class);
 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 finish();
 startActivity(intent);

更新:非常感谢David Wasser,所以正确的答案应该是这样的:

// SplashActivity
 if(!isTaskRoot()) {
    finish();
    return;
 }

参考:在 Home 按钮上重新启动 Activity,但是……只是第一次

于 2013-11-05T14:44:09.850 回答